Symfony 2表单字段单选按钮 required=false?

4

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

/**
 * @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>

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

3个回答

17

解决方案为 required => falseempty_value => false

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

6
这个解决方案在Symfony 2.8之前是好的,但是从2.7开始,“empty_value”已经被弃用(并在3.0中删除),必须使用“placeholder”选项。 - Massimiliano Arione

4

此处所述,

required
type: Boolean default: true

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

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

此外,你可以从文档中了解到,这是表面的,并且独立于验证。最好的情况是,如果你让Symfony猜测你的字段类型,那么此选项的值将从你的验证信息中猜测出来。然后,你需要设置一个验证规则,以考虑你的字段不应该是必需的,以便让你的表单设置正确的必填值。这可能会有所帮助:这里

我之前尝试过这个,但它会在顶部添加额外的收音机,而我不希望出现这种情况。 - user2156980
我已经设置了 * @Assert\Choice(choices = {4,3,2,1, null}) 但是没有任何变化。 - user2156980
好的,我已经找到了解决方案 'required' => false, 'empty_value' => false - user2156980
@user2156980 不用谢。知道 empty_value 也应该设置为 false 很好。 - Ahmed Siouani

1
自从Symfony 3.0版本以后,empty_value已被移除,你需要使用placeholder代替:
 $builder
        ->add(
              'student', 
              'choice', 
              [
                'label'=> false,
                'expanded' => true,
                'choices' => (Array)new StudentEnum(),
                'required' => false,
                'placeholder' => null
              ]
         );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接