Security cakephp和多个复选框
我不会对habtm做任何花哨的事 我想做的是在cakephp中设置多个复选框,并使用它们 因此,我认为有以下代码:Security cakephp和多个复选框,security,cakephp,checkbox,Security,Cakephp,Checkbox,我不会对habtm做任何花哨的事 我想做的是在cakephp中设置多个复选框,并使用它们 因此,我认为有以下代码: <div class="deleteButton"> <?php echo $form->input('', array('type'=>'checkbox', 'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false, 'id'=
<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($this->data);
看起来cakephp正在以某种方式覆盖存储的值,因为我得到的一个值始终是最后选中的复选框值
我做错了什么
更新:哦,上帝,我讨厌cakephp
使用此选项:
或者更确切地说,这是:
输入($video['video']['id'],数组('type'=>'checkbox','value'=>$video['video']['id'],'label'=>false,'hiddenField'=>false,'multiple'=>true));?>
(我把$video['video']['id']作为第一个条目,显然是用于id的)
我的请求现在被cakephp在安全组件中的完全ridic黑洞屏蔽了。老实说,为什么404页面没有一个可切换的错误?现在我必须找出如何从中得到一个有意义的错误
欢迎任何意见
更新:已解决:
嗯,我需要的是:
<?php echo $form->input("Video".$video['Video']['id']."id", array('type'=>'checkbox', 'value'=>$video['Video']['id'], 'label'=>false, 'hiddenField'=>false, 'multiple'=>true)); ?>
也就是说,我用“video”和“id”包装了$video['video']['id']
NFI为什么这样做,任何人有任何想法,我都会认为你是对的 在$form->input()中,第一个参数是model.field。在第一种情况下,您没有指定字段,因此它们都进入$this->data['Videos'],而不是$this->data['Videos']['cb1'],$this->data['Videos']['cb2'],$this->data['Videos']['cb3']
即使使用模型创建表单:
$form->create('modelName')代码>
指定字段也是一个好习惯:
$form->input('modelName.fieldname',array())$form->input()中的code>第一个参数是model.field。在第一种情况下,您没有指定字段,因此它们都进入$this->data['Videos'],而不是$this->data['Videos']['cb1'],$this->data['Videos']['cb2'],$this->data['Videos']['cb3']
即使使用模型创建表单:
$form->create('modelName')代码>
指定字段也是一个好习惯:
$form->input('modelName.fieldname',array())代码>
看起来cakephp正在以某种方式覆盖存储的值,因为我得到的一个值始终是最后选中的复选框值
这不是蛋糕的错。。。如果有两个或多个输入具有相同的名称(在您的示例中为“data[Videos]”),php将仅使用最后一个值来创建$\u POST变量。。如果您执行以下操作,则类似于GET请求:
mysite.com/intex.php?attr=1&attr=2&attr=3
<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">
echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
'Value 2'=>'Label 2',
'Value 3'=>'Label 3'
),
'multiple' => 'checkbox'
));
您通过在字段名中添加视频id解决了此问题。因此,现在生成的html类似于:
mysite.com/intex.php?attr=1&attr=2&attr=3
<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">
echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
'Value 2'=>'Label 2',
'Value 3'=>'Label 3'
),
'multiple' => 'checkbox'
));
都在文件里;)
希望这有帮助
看起来cakephp正在以某种方式覆盖存储的值,因为我得到的一个值始终是最后选中的复选框值
这不是蛋糕的错。。。如果有两个或多个输入具有相同的名称(在您的示例中为“data[Videos]”),php将仅使用最后一个值来创建$\u POST变量。。如果您执行以下操作,则类似于GET请求:
mysite.com/intex.php?attr=1&attr=2&attr=3
<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">
echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
'Value 2'=>'Label 2',
'Value 3'=>'Label 3'
),
'multiple' => 'checkbox'
));
您通过在字段名中添加视频id解决了此问题。因此,现在生成的html类似于:
mysite.com/intex.php?attr=1&attr=2&attr=3
<input type="checkbox" value="30" name="data[Videos1]">
<input type="checkbox" value="31" name="data[Videos2]">
<input type="checkbox" value="32" name="data[Videos3]">
echo $this->Form->input('video',array('options'=> array('Value 1'=>'Label 1',
'Value 2'=>'Label 2',
'Value 3'=>'Label 3'
),
'multiple' => 'checkbox'
));
都在文件里;)
希望这有帮助如果我使用foreach php循环来创建复选框,或者至少我是这么做的,那么有没有一种优雅的方法来创建您建议的数组?也就是说,我不知道我需要多少复选框(这是一个删除此复选框,因此它取决于用户必须删除多少),因此我无法对您建议的数组进行预编码!您可以使用转换数组并在input()
中使用它,或者-因为Set类对我来说太聪明了,太有用了-我可以在循环中创建数组(顺便说一句,我使用了我在问题中发布的解决方案-但这是理论上的星期二!),然后,在循环之外,只需运行您建议使用循环中的arrar作为输入的代码!如果我使用foreach php循环来创建复选框——或者至少,我就是这么做的——有没有一种优雅的方法来创建您建议的数组?也就是说,我不知道我需要多少复选框(这是一个删除此复选框,因此它取决于用户必须删除多少),因此我无法对您建议的数组进行预编码!您可以使用转换数组并在input()
中使用它,或者-因为Set类对我来说太聪明了,太有用了-我可以在循环中创建数组(顺便说一句,我使用了我在问题中发布的解决方案-但这是理论上的星期二!),然后,在循环之外,只需运行您建议使用循环中的arrar作为输入的代码!