如何解决symfony2:未选中复选框的值不考虑在内
环境:
- Symfony2.6.7
- PHP 5.6.32-Win32-VC11-x64
- Windows10
我是symfony的新手。我正在尝试将新列添加到现有表。该列在每行中都有复选框。到目前为止,我可以在渲染它们时选中或取消选中StoreController.php的复选框。然后,我选中或取消选中某些复选框以更改状态。并提交表格。但是我得到数组格式的奇怪结果。看起来未选中的复选框的值未考虑在内。我应该如何解决此问题以获得所有复选框的检查状态。
有similar question。但是此表单是使用Post请求提交的,因此有所不同。
json_edit.html.twig
<form method="post" action="/store/json_edit?{% if (1 != isStore) %}id={{ id | e }}&{% endif %}json={{ jsonFileName | e }}&type={{ type | e }}">
...(ellipsis)
<td><div style="text-align: center;"><input type="checkbox" name="tv_shipping[]" {% if (1 == jsonDataTv.shipping) %}checked value="1"{% else %}value="0"{% endif %} /></div></td>
It displays as this. 该表有三行。
然后,单击按钮提交表单,然后尝试从复选框中获取结果。
StoreController.php
var_dump($request->get("tv_shipping"));//array(2) { [0]=> string(1) "1" [1]=> string(1) "1" }
结果数组只有两个对象。我认为应该具有以下三个对象。
//array(2) { [0]=> string(1) "1" [1]=> string(1) "0" [2]=> string(1) "1" }
解决方法
感谢评论区的建议。我自己想出了一个解决方案。
我为每个复选框元素添加了索引号value="{{key}}"
。关键是索引从0开始,随着行索引的增加而从1开始递增。
json_edit.html.twig
<td><div style="text-align: center;"><input type="checkbox" name="tv_shipping[]" {% if (1 == jsonDataTv.shipping) %}checked{% endif %} value="{{key}}"/></div></td>
在php控制器中,我按行索引循环并检查是否有复选框,其中复选框的值等于行索引。如果达到目标,则选中该复选框。如果没有匹配的对,则表示未选中该复选框。
StoreController.php
//get state if checkbox is checked or not as boolean.
$checked = false;
if(0 < count($request->get("tv_shipping"))){
foreach($request->get("tv_shipping") as
$key_arrayResult=>$value_arrayResult){
if((int)$value_arrayResult === $count+1){
$checked = true;
break;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。