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>

...

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

4

3 回答 3

17

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

$builder
        ->add('student', 'choice', [
                'label'=> false,
                'expanded' => true,
                'choices' => (Array)new StudentEnum(),
                'required' => false,
                'empty_value' => false
        ]);
于 2013-11-04T11:42:28.790 回答
4

如此处所述,

required
type: Boolean default: true

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

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

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

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

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

可能会有所帮助。

于 2013-11-04T10:55:24.770 回答
1

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

 $builder
        ->add(
              'student', 
              'choice', 
              [
                'label'=> false,
                'expanded' => true,
                'choices' => (Array)new StudentEnum(),
                'required' => false,
                'placeholder' => null
              ]
         );
于 2017-08-21T12:32:53.963 回答