Php symfony2:未选中复选框';s值未考虑在内

Php symfony2:未选中复选框';s值未考虑在内,php,twig,symfony-2.6,Php,Twig,Symfony 2.6,环境: Symfony2.6.7 PHP 5.6.32-Win32-VC11-x64 窗口10 我是新来的。我正在尝试向现有表中添加新列。该列在每行中都有复选框。到目前为止,我可以在呈现StoreController.php时选中或取消选中复选框。然后,我选中或取消选中一些复选框以更改状态。并提交表格。但我在数组格式中得到了奇怪的结果。看起来没有考虑未选中复选框的值。我应该如何修复此问题以获取所有复选框的复选状态 有。但此表单是使用Post请求提交的,因此它是不同的 json_edit.ht

环境:

  • Symfony2.6.7
  • PHP 5.6.32-Win32-VC11-x64
  • 窗口10
我是新来的。我正在尝试向现有表中添加新列。该列在每行中都有复选框。到目前为止,我可以在呈现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>
<td><div style="text-align: center;"><input type="checkbox" name="tv_shipping[]" {% if (1 == jsonDataTv.shipping) %}checked{% endif %} value="{{key}}"/></div></td>
结果数组只有两个对象。我认为它应该有三个对象,如下所示

//array(2) { [0]=> string(1) "1" [1]=> string(1) "0" [2]=> string(1) "1" }

感谢评论区的建议。我自己想出了一个解决办法

我将索引号作为
value=“{{key}}”
添加到每个复选框元素中。关键是从0开始的索引随着行索引的增加而增加1

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

var_dump($request->get("tv_shipping"));//array(2) { [0]=> string(1) "1" [1]=> string(1) "1" }
    //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;
           }
         }
     }
//如果复选框被选中或未被选为布尔值,则获取状态。
$checked=false;
如果(0get(“tv\u shipping”)){
foreach($request->get(“tv_shipping”)作为
$key\u arrayResult=>$value\u arrayResult){
如果((int)$value\u arrayResult===$count+1){
$checked=true;
打破
}
}
}

未选中的复选框不会在请求时发送。@单击“确定”。如何从控制器端获取未检查状态?是否有最佳实践?如果没有,则必须假定它未选中。
If(!isset($\u POST['chk\u checkbox']){
$checkbox=isset($\u POST['chk\u checkbox']);