Symfony 2表格现场无线电要求=假?

时间:2013-11-04 10:46:29

标签: forms symfony doctrine-orm choice

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

/**
 * @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 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:4)

如上所述here

required
type: Boolean default: true

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

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

此外,您可以阅读文档,

  

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

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

This可能有帮助。

答案 2 :(得分:0)

由于删除了Symfony 3.0 empty_value,您需要使用placeholder代替:

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