13

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

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

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

我尝试更改nullable=falsenullable=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');
    }
}
4

3 回答 3

27

此错误是因为输入标记有 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

于 2012-06-28T19:32:32.130 回答
-1

只是使用呢nullable=""

于 2012-06-28T19:29:47.650 回答
-3

好吧,看来我使用了错误版本的网站。提到的所有方法都有效,我只想在下面总结它们,以供将来遇到此类问题的任何人使用。

这里的问题是 HTML5 喜欢自己验证表单并将 a 添加required="required"到任何表单输入。通常,这可能是一件有用的事情,但对于复选框之类的东西,您希望选择不选中它们并提交表单,而浏览器不会在客户端抱怨。

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

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

另一种是在注释中为实体变量添加信息,使nullable=true. 这允许数据库中的相应列具有空值,这可能会或可能不适合您的情况。这如下所示。

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

最后,在构建表单时,您可以使用某些选项在表单中进行验证。文档详细说明并提供了更多示例,但出于我们的目的,重要的部分是您可以设置'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');
    }
}

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

于 2012-06-29T16:17:06.043 回答