Forms CakePHP:将字段添加到表单(动态)
我试图动态地将字段添加到我的CakePHP表单中,但似乎我使用的每个方法都有自己的缺点,我无法修复。以下是我尝试过的:Forms CakePHP:将字段添加到表单(动态),forms,cakephp,Forms,Cakephp,我试图动态地将字段添加到我的CakePHP表单中,但似乎我使用的每个方法都有自己的缺点,我无法修复。以下是我尝试过的: 不要添加新输入,只需用逗号分隔单个输入中的值。这看起来很简单,在尝试分解输入并将每个值保存到数据库的新行时出现了一些问题。但当我不得不编辑这些值时,我放弃了这个想法……收集所有值并在输入中内爆它们,然后在保存时检查所有值是否仍然存在,如果没有,则从表中删除相应的行……要做的工作很多 我尝试用JS动态创建新的输入。但在这里,我偶然发现了两个问题:安全组件,它抛出了一个黑洞尝试(我
name=[Model][14][field],name=[Model][17][field]
,因此我不能限制安全组件不验证这些特定的输入(无论如何,只有在安全组件构建其数据之后,我才知道它们的ID)谢谢大家! 我不确定我能不能给你一个完整的答案,但希望我能给你一些想法 我发现自己在尝试创建投票管理系统时也遇到了类似的情况 每个民意测验都有许多民意测验选项,我希望能够根据需要在我的民意测验/管理编辑页面上动态添加尽可能多的民意测验选项 我通过CakePHP的内置功能和一点Javascript实现了这一点 在admin_edit视图中构建表单时,我首先在Poll字段中添加以下内容:
<div id="poll-options">
<?php
if (isset($this->data['PollOption'])) {
$i = 0;
foreach ($this->data['PollOption'] as $opt) {
echo $form->hidden("PollOption.$i.id");
echo $form->input("PollOption.$i.name", array('label' => "Option " . ($i + 1)));
$i++;
}
}
?>
</div>
(如果不确定上述语法,可以检查CakePHP API或文档)
我使用Javascript(jQuery)动态添加PollOption字段:
$('#add-option-button').click(function(event){
var optionCount = $('#poll-options > div').size() + 1;
var inputHtml = '<div class="input text"><label for="PollOption' + optionCount + 'Name">Option ' + optionCount
+ '</label><input id="PollOption' + optionCount + 'Name" type="text" name="data[PollOption][' + optionCount + '][name]" /></div>';
event.preventDefault();
$('#poll-options').append(inputHtml);
});
$(“#添加选项按钮”)。单击(函数(事件){
var optionCount=$('#poll options>div').size()+1;
var inputtml='Option'+optionCount
+ '';
event.preventDefault();
$(“#轮询选项”).append(inputtml);
});
您提到您自己在做这件事,但是如果您不尝试在表单上使用安全组件,您应该不会遇到任何问题
希望这有助于为您指明正确的方向,或者给您一些想法。在某些情况下,此解决方案:
var optionCount = $('#poll-options > div').size() + 1;
在db中查找现有id(optionCount)时,可以覆盖场景中的旧数据。
如果你要添加新的数据,迭代索引应该由uniq generator生成。不能肯定,但我认为不可能使用安全组件并向表单中添加字段。保护表单的整个要点是对表单进行校验和,并确保不添加或删除任何字段。您是否可以尝试在不使用安全组件的情况下执行此操作,并找到另一种方法来确保表单被锁定?好的,假设我不使用安全组件。那么如何验证所有添加的字段,并在表单未验证时检索它们的值呢?这就是表单验证,在模型中完成。与安全组件的功能非常不同。我会把安全组件放在一边,除非你的应用程序绝对必须有它,然后只验证模型中的表单输入。这里有更多关于验证输入的信息:问题是我的表单中有一个主模型,然后是所有相关的类别。此外,这些类别可以包含多个值,因此要保存的类别数量是动态的,我不知道如何准确检索填充的类别及其id(
Model.0.field
,Model.1.field
,…,Model.n.field
)听起来像我需要的。我的逻辑更复杂,但我相信我会在你详细的例子之后处理它。非常感谢,这是我所需要的!表单生成是使用jquery手动完成的(硬编码),而不是使用cake表单助手,这在生成大型/多个表单时会有点混乱。我在想-有没有办法使用Js帮助程序和表单帮助程序来实现同样的效果?Ankan,我也在想同样的问题,我有一些非常复杂的表单,一直在使用jQuery的.clone()方法复制Cake的自动生成表单字段,然后使用.replace()编辑ID等,但我觉得它不是很健壮,我更希望FormHelper或JsHelper中有一个功能来支持多个关系条目。动态添加字段如何使用cakephp验证规则?因为如果您这样做,jquery生成的输入(客户端大小)将不会有任何验证规则。当然,您可以创建客户端验证规则,但我们知道它不是那么安全。
var optionCount = $('#poll-options > div').size() + 1;