【问题标题】:symfony2: unchecked checkbox's value is not taken into accountsymfony2:未选中复选框的值未考虑在内
【发布时间】:2021-02-05 07:17:45
【问题描述】:

环境:

  • 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" }

【问题讨论】:

  • 未选中的复选框不会根据请求发送。
  • @jerkan 好的。我应该如何从控制器端获得未经检查的状态?有最佳做法吗?
  • 如果它不存在,你必须假设它没有被选中。
  • if (!isset($_POST['chk_checkbox'])) {$checkbox = isset($_POST['chk_checkbox']);

标签: php twig symfony-2.6


【解决方案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;
           }
         }
     }

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 2023-01-03
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    相关资源
    最近更新 更多