POST数据中缺少Symfony 2未选中复选框

时间:2015-12-23 08:48:01

标签: forms symfony

GET或POST数据中没有

未选中复选框。

如何处理? 是否需要手动执行或者symfony $ form-> getData()没有自动处理它的另一个原因?

2 个答案:

答案 0 :(得分:1)

默认情况下,Symfony会将您的复选框解析为一个数组,所以如果您有一个已选中的复选框,您将在form->getData()中拥有它,否则您将无法使用它,所以在您的控制器中如果您没有选中复选框表单数据意味着取消选中该复选框

答案 1 :(得分:0)

如上所述

我遇到了同样的问题,老实说我不明白为什么像“unchecked_value”这样的未选中复选框类型没有选项值=> false

我不得不手动检查提交的字段,检查字段是否尚未提交,然后我知道它在表单提交中丢失,这意味着它等于 false。

这是在我的类中要在持久化之前运行...它基本上会遍历属性并将其值设置为 false

public function setUncheckedReplacementFields(array $data)
{
    foreach($this as $property => $value){
        if(str_contains('Replacement', $property) !== false){
            if(!in_array($property, $data)){
                $method = sprintf('set%s', ucfirst($property));
                if(method_exists(this, $method)){
                    $this->$method(false);
                }
            }
        }
    }
}

在我坚持表单之前,我运行这个

$object->setUncheckedReplacementFields($request->request->get($form->getName()));

因此,如果字段不是表单的一部分,我知道它已被取消选中,我会遍历对象以找到这些复选框,并在我未选中的情况下将它们设置为 false。