如何在symfony中允许复选框为空?

时间:2012-06-28 19:23:28

标签: php symfony

我在我的应用程序中的实体中定义了以下变量。我有这个,以及其他可以通过表单界面更新的字段,我希望能够在该表单上选中并取消选中此框。

我可以勾选方框并提交表格,但似乎当我取消选中此框时,我无法提交表格。它给了我一个Please check this box if you want to proceed

/**
 * @var boolean $updatesNeeded
 *
 * @ORM\Column(name="updates_needed", type="boolean", nullable=false)
 */
private $updatesNeeded;

我尝试将nullable=false更改为nullable=true并更新架构,但它似乎无法正常工作。任何想法都会非常感激。

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class BlahType extends AbstractType
{
    /**
     * @param \Symfony\Component\Form\FormBuilder $builder
     * @param array                               $options
     */
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('stuff')
            ->add('updatesNeeded', 'choice', array('required' => false))
            ->add('anothervar');
    }
}

3 个答案:

答案 0 :(得分:26)

此错误是因为输入标有HTML5属性required="required"。在表单类型中,您可以通过在此复选框上将required选项设置为false来禁用此功能。

$builder->add('updatesNeeded', 'choice', array('required' => false));

http://symfony.com/doc/current/book/forms.html#book-forms-html5-validation-disable

答案 1 :(得分:-1)

如何使用nullable=""

答案 2 :(得分:-3)

好吧,好像我使用的是我网站的错误版本。提到的所有方法都有效,我只想在下面总结一下将来遇到这样一个问题的人。

这里的问题是HTML5喜欢自己验证表单并向任何表单输入添加required="required"。通常,这可能是一个有用的东西,但是对于像复选框这样的东西,你想要选择不选中它们并在没有浏览器抱怨的情况下提交表单。

有几种方法可以解决这个问题,有些方法比其他方法更好。

第一种是简单地使用HTML5禁用表单的所有验证,如官方symfony docs所述。

另一种方法是在评论中向实体变量添加信息,制作nullable=true。这允许数据库中的相应列具有空值,这可能适合您的情况,也可能不适合您的情况。如下所示。

/**
 * @var boolean $varName
 *
 * @ORM\Column(name="var_name", type="boolean", nullable=true)
 */
private $varName;

最后,在构建表单时,您可以使用某些选项在表单中进行验证。 docs详细信息并提供更多示例,但就我们的目的而言,重要的是您可以设置'required' => false,如下所示。

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class BlahType extends AbstractType
{
    /**
     * @param \Symfony\Component\Form\FormBuilder $builder
     * @param array                               $options
     */
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('stuff')
            ->add('checkbox_var', 'checkbox', array('required' => false))
            ->add('anothervar');
    }
}

感谢所有帮助我解决此问题的人。我希望这有助于将来必须处理这些问题的人。