如何阻止Symfony 2复选框返回null

如何阻止Symfony 2复选框返回null,symfony,checkbox,symfony-forms,Symfony,Checkbox,Symfony Forms,在我的Symfony 2表格上,我有两个复选框。文件说明 如果选中该框,则该字段将设置为true(如果该框为true) 未选中,该值将设置为false“ 这是我希望发生的事情,但是当复选框被取消选中时,我实际上什么也没有得到。我意识到HTML表单上的复选框如果未选中通常不会返回任何内容,我通常会在后端添加一些逻辑来处理它,但听起来Symfony应该为我这样做,而不是 我做错了什么或错过了什么 我的表单类型如下所示: public function buildForm(FormBuilderInt

在我的Symfony 2表格上,我有两个复选框。文件说明

如果选中该框,则该字段将设置为true(如果该框为true) 未选中,该值将设置为false“

这是我希望发生的事情,但是当复选框被取消选中时,我实际上什么也没有得到。我意识到HTML表单上的复选框如果未选中通常不会返回任何内容,我通常会在后端添加一些逻辑来处理它,但听起来Symfony应该为我这样做,而不是

我做错了什么或错过了什么

我的表单类型如下所示:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('fullname', 'text')
            ->add('screened', 'checkbox', array(
                'label'     => 'Enable screening emails?' ))
            ->add('dedupe', 'checkbox', array(
                'label'     => 'Enable live dedupeing?'))
 );)
<div class="form-group">
    <div class="input-group col-sm-offset-2 col-sm-10">
        <div class="checkbox col-sm-6">
            {{ form_widget(form.screened) }}
            {{ form_label(form.screened) }}
        </div>
        <div class="checkbox col-sm-6">
            {{ form_widget(form.dedupe, {'attr': {'required': 'false'}}) }}
            {{ form_label(form.dedupe) }}
        </div>

    </div>
</div>
细枝模板的相关部分如下所示:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('fullname', 'text')
            ->add('screened', 'checkbox', array(
                'label'     => 'Enable screening emails?' ))
            ->add('dedupe', 'checkbox', array(
                'label'     => 'Enable live dedupeing?'))
 );)
<div class="form-group">
    <div class="input-group col-sm-offset-2 col-sm-10">
        <div class="checkbox col-sm-6">
            {{ form_widget(form.screened) }}
            {{ form_label(form.screened) }}
        </div>
        <div class="checkbox col-sm-6">
            {{ form_widget(form.dedupe, {'attr': {'required': 'false'}}) }}
            {{ form_label(form.dedupe) }}
        </div>

    </div>
</div>

如果我理解得很好,那么您需要在字段未被检查时进行处理,因为您在处理表单请求时没有收到响应

您可以通过以下方式解决此问题:

 if ($form->isValid()) {
     $form->handleRequest($request);

     $em = $this->getDoctrine()->getManager();

     $entity = $form->getData();

     var_dump($entity->getScreened());
     var_dump($entity->getFullname());
     var_dump($entity->getDedupe());

     // They should return you the values set on the create form
     $em->persist($entity);
     $em->flush();
 }
如果没有获得值,请尝试使用这种方法,但不是正确的方法

if (!isset($form->get('screened')) {
    $entity->setScreened(false);
}

if (!isset($form->get('dedupe')) {
    $entity->setDedupe(false);
}

它将检查您是否没有接收到任何重复数据消除和表单筛选的数据,如果是这种情况,您将知道该值未被检查

如果我很清楚,您需要在未检查字段时进行处理,因为您在处理表单请求时没有收到响应

您可以通过以下方式解决此问题:

 if ($form->isValid()) {
     $form->handleRequest($request);

     $em = $this->getDoctrine()->getManager();

     $entity = $form->getData();

     var_dump($entity->getScreened());
     var_dump($entity->getFullname());
     var_dump($entity->getDedupe());

     // They should return you the values set on the create form
     $em->persist($entity);
     $em->flush();
 }
如果没有获得值,请尝试使用这种方法,但不是正确的方法

if (!isset($form->get('screened')) {
    $entity->setScreened(false);
}

if (!isset($form->get('dedupe')) {
    $entity->setDedupe(false);
}

它将检查您是否没有接收到任何重复数据消除和从表单中筛选的数据,如果是这种情况,您将知道该值尚未检查

我真的不清楚问题出在哪里。。。您能澄清一下吗?当表单提交且复选框未选中时,复选框的值不会返回。Thios是我对HTML表单的期望,但是Symfony文档指出,如果不选中它,它应该返回False。为什么我没有得到任何东西而不是虚假的?我真的不清楚问题出在哪里。。。您能澄清一下吗?当表单提交且复选框未选中时,复选框的值不会返回。Thios是我对HTML表单的期望,但是Symfony文档指出,如果不选中它,它应该返回False。为什么我得到的不是false而是nothing?是的,正如我说的,我通常(在标准PHP中)会处理后端没有值的情况,但是Symfony文档说我不需要,它应该为我处理。您是否使用实体属性映射字段?data_类与某个实体相关?不确定您的意思。表单在创建时映射到用户实体,而筛选和重复数据消除是用户实体中的字段。我将编辑我的问题并添加该代码。\n如果我要添加您建议的代码以设置缺少的值,我需要将其放置在哪里?尝试转储$form->getData(),如果表单与实体关联,您以后不需要设置值,$form->getData()应返回实体$user,因为已映射,我将更新我的回答是,正如我所说,我通常(在标准PHP中)会处理后端没有值的情况,但Symfony文档说我不需要,它应该为我处理。您是否使用实体属性映射字段?data_类与某个实体相关?不确定您的意思。表单在创建时映射到用户实体,而筛选和重复数据消除是用户实体中的字段。我将编辑我的问题并添加该代码。\n如果我要添加您建议的代码来设置缺少的值,我需要将其放在哪里?尝试转储$form->getData(),如果表单与实体关联,您以后不需要设置值,$form->getData()应返回实体$user,因为已映射,我将更新我的答案