我没有做任何与habtm相关的事情。
我想要做的是在cakephp中有多个复选框,并且,好吧,使用它们。
所以我在我看来有这个代码:
<div class="deleteButton">
<?php echo $form->input('', array('type'=>'checkbox',
'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false,
'id'=>false, 'multiple'=>true)); ?>
</div>
这在渲染页面中给了我这个html:
<input type="checkbox" value="30" name="data[Videos]">
<input type="checkbox" value="31" name="data[Videos]">
<input type="checkbox" value="32" name="data[Videos]">
现在,当我在html中选择并提交时,我只在控制器中获得一个值: ... PR($这 - &GT;数据); ...
看起来像cakephp正在以某种方式覆盖存储的值,因为我获得的ONE值始终是最后检查的复选框值。
我做错了什么?
更新:哦,上帝,我讨厌cakephp
使用此:http://nuts-and-bolts-of-cakephp.com/2008/05/05/multiple-checkboxes/
或者更确切地说,这:: 输入($ video ['Video'] ['id'],数组('type'=&gt;'复选框','值'=&gt; $ video ['视频'] ['id'],'标签'= &gt; false,'hiddenField'=&gt; false,'multiple'=&gt; true)); ?&GT;
(我将$ video ['Video'] ['id']作为第一个条目,显然是ids)
我的请求现在被Cakephp在安全组件中完全荒谬的黑洞搞黑了。老实说,为什么404页面没有可切换的错误?现在我必须弄清楚如何从中获得有意义的错误...
欢迎任何想法!
更新:解决: 嗯,我需要:
<?php echo $form->input("Video".$video['Video']['id']."id", array('type'=>'checkbox', 'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false, 'multiple'=>true)); ?>
也就是说,我将$ video ['Video'] ['id']包装成“Video”和“id”。
NFI为什么这样有效,任何人都有任何想法,我会把你标记为正确!
答案 0 :(得分:4)
看起来像cakephp正在以某种方式覆盖存储的值,因为我得到的ONE值始终是最后检查的复选框值。
这不是蛋糕的错...如果你有两个或多个具有相同名称的输入(在你的情况下'数据[视频]'),php将只使用最后一个值来创建$ _POST变量..它比如在GET请求中执行类似的操作:
mysite.com/intex.php?attr=1&attr=2&attr=3
您通过在字段名称中添加视频ID来解决此问题。所以现在生成的html就像:
<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">
如您所见,现在所有输入名称都不同,没有任何内容被覆盖。
但是,您可以使用“multiple”选项和“options”选项仅使用一个语句创建所有复选框,而不是自己提供名称。类似的东西:
echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
'Value 2'=>'Label 2',
'Value 3'=>'Label 3'
),
'multiple' => 'checkbox'
));
一切都在文档中;)
希望这有帮助
答案 1 :(得分:0)
第一个参数是model.field。在第一种情况下,你没有指定字段,所以他们都进入$ this-&gt; data ['Videos']而不是$ this-&gt; data ['Videos'] ['cb1'],$ this-&gt; data [ '画'] [ 'CB2'],$这 - &GT;数据[ '画'] [ 'CB3']
即使您使用模型创建表单:
$form->create('modelName'));
指定字段也是一个好习惯:
$form->input('modelName.fieldname', array());