Symfony2:未选中复选框的值不被考虑在内



环境:

  • Symphony2.6.7
  • PHP 5.6.32-Win32-VC11-x64
  • Windows10

我是symfony的新手。我正在尝试将新列添加到现有表中。该列每行都有复选框。到目前为止,我可以在渲染它们时通过StoreController.php选中或取消选中复选框。然后,我选中或取消选中一些复选框来更改状态。然后提交表格。但我得到了数组格式的奇怪结果。看起来没有考虑未选中复选框的值。我应该如何修复此问题以获取所有复选框的复选状态。

还有类似的问题。但此表单是使用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>

它显示为这样。这张表有三行。

然后,单击按钮提交表单,并尝试从复选框中获取结果。

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;
}
}
}

最新更新