Symfony 2表单字段收音机需要=假?

Posted

技术标签:

【中文标题】Symfony 2表单字段收音机需要=假?【英文标题】:Symfony 2 form field radio required=false? 【发布时间】:2013-11-14 23:21:54 【问题描述】:

这是我的实体类的一部分:

/**
 * @var integer
 *
 * @ORM\Column(name="student", type="integer", nullable=true)
 */
private $student;

我的表单类的这一部分:

 $builder
    ->add('student', 'choice', ['label'=> false,
    'expanded' => true,
    'choices' => (Array)new StudentEnum(),
   ])
        ;

这是输出:

<input id="xxxxx_0" type="radio" value="4" required="required" name="xxxxx[student]">
<label class="required" for="xxxxxV_student_0">Nie</label>

...

我的问题是我的输入标签不应该有属性“必需”,因为我在实体中设置了 nullable=true。

【问题讨论】:

【参考方案1】:

解决方案是required =&gt; falseempty_value =&gt; false

$builder
        ->add('student', 'choice', [
                'label'=> false,
                'expanded' => true,
                'choices' => (Array)new StudentEnum(),
                'required' => false,
                'empty_value' => false
        ]);

【讨论】:

这个解决方案在 Symfony 2.8 之前是好的,那么你必须使用 "placeholder" 选项,因为 "empty_value" 在 2.7 中已被弃用(并在 3.0 中被删除)【参考方案2】:

如here所述,

required
type: Boolean default: true

required 选项默认值设置为true,因此您应该将其设置为false

builder->add('student', 'choice', array(
          'label'=> false,
          'expanded' => true,
          'required' => false,
          //...
   ))
;

此外,您可以从文档中了解到,

这是肤浅的,独立于验证。充其量,如果你让 Symfony 猜你的字段类型,那么这个选项的值将从你的 验证信息。

然后,您需要设置一个验证规则,考虑到您的字段不应该是必需的事实,以便让您的表单设置正确的 required 值。

This 可能会有所帮助。

【讨论】:

我之前试过这个,这个在顶部添加了额外的收音机,我不想要那个。 我已设置 * @Assert\Choice(choices = 4,3,2,1, null) 但没有任何改变。 OK 我找到了解决方案 'required' => false, 'empty_value' => false @user2156980 不客气。很高兴知道 empty_value 也应该设置为 false。【参考方案3】:

由于 Symfony 3.0 empty_value 已被删除,您需要改用 placeholder

 $builder
        ->add(
              'student', 
              'choice', 
              [
                'label'=> false,
                'expanded' => true,
                'choices' => (Array)new StudentEnum(),
                'required' => false,
                'placeholder' => null
              ]
         );

【讨论】:

以上是关于Symfony 2表单字段收音机需要=假?的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 表单验证:如果另一个字段不为空,则需要字段

直接访问登录表单时未设置会话 cookie,导致 CSRF 令牌无效

如何在循环symfony2中为同一实体添加重复的表单

在 Twig 中设置 Symfony 2 表单字段的默认值

Windows 安装 Symfony 2.2 框架 - 安装成功 !!

Symfony2 - 向现有实体添加新字段