Symfony 1.0多选复选框仅获取最后一个选中值问题求助
解决Symfony 1中多选复选框仅获取最后一个选中值的问题
这个问题其实是HTML表单的通用特性导致的——当多个复选框使用**相同的name属性且不带[]**时,提交表单只会保留最后一个选中的值。咱们来一步步修复:
1. 修改模板中的复选框命名
把原来的motif改成motif[],让浏览器把选中的多个值以数组形式提交:
<tr> <th>Est prolongé :</th> <td><?php echo checkbox_tag('motif[]', '1'); ?></td> </tr> <tr> <th>Est interrompu :</th> <td><?php echo checkbox_tag('motif[]', '2'); ?></td> </tr>
添加[]后,Symfony会自动将选中的值封装成数组接收。
2. 调整Action中的处理逻辑
现在可以通过getRequestParameter获取到所有选中的值组成的数组,然后判断每个选项是否被选中:
public function executeAddFormAvenant() { sfLoader::loadHelpers('Url'); // Enregistremant d'un nouvel avenant : $avenant = new ConvFormAvenant(); $avenant->setIdConvConvention($this->getRequestParameter('id_convention')); $conv_convention = ConvConventionPeer::retrieveByPk($this->getRequestParameter('id_convention')); // 获取选中的motif数组,默认空数组避免报错 $selectedMotifs = $this->getRequestParameter('motif', array()); // 判断"Est prolongé"是否被选中 $avenant->setEstProlongé(in_array('1', $selectedMotifs) ? 1 : 0); // 判断"Est interrompu"是否被选中 $avenant->setEstInterrompu(in_array('2', $selectedMotifs) ? 1 : 0); // 别忘了保存实体(如果之前没写的话) $avenant->save(); }
这样修改后,不管选中几个复选框,对应的字段都会被正确设置为1或0啦。另外要确保你的ConvFormAvenant实体中,EstProlongé和EstInterrompu字段是支持存储0/1的类型(比如MySQL的tinyint(1))。
内容的提问来源于stack exchange,提问作者Toune
相关产品推荐
相关产品推荐

