Symfony2-NotBlank约束不适用于EntityType

Ign*_*kis 1 forms validation constraints symfony

EntityType我的表单中有两个字段,并且都NotBlank分配了约束。

现在,我遇到了NotBlank一个问题,即约束不只对启用了一个字段起作用multiple => true

$builder
    ->add('preferredCountries', EntityType::class, array(
        'required' => false,
        'class' => 'IndexBundle:Country',
        'property' => 'name',
        'empty_value' => 'Choose',
        'multiple' => true,
        'query_builder' => function (EntityRepository $er) {
            return $er->createQueryBuilder('c')
                ->where('c.name != :name')
                ->orderBy('c.name', 'ASC')
                ->setParameter('name', 'Other');
        },
        'constraints' => array(
            new NotBlank(array(
                'message' => 'blank!!!',
            )),
        )
    ))
    ->add('internshipProgram', EntityType::class, array(
        'required' => false,
        'class' => 'IndexBundle:InternshipProgram',
        'property' => 'name',
        'empty_value' => 'Choose',
        'constraints' => array(
            new NotBlank(array(
                'message' => 'blank!!!',
            )),
        )
    ))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当我提交空值时,字段internshipProgram会报错,而prefferedCountries不是。

表格显示:

<div class="form-group col-xs-12">
    {{ form_label(current_internship_form.preferredCountries, 'Preferred countries', { 'label_attr': {'class': 'label-text'} }) }}
    {{ form_widget(current_internship_form.preferredCountries) }}
    <span class="error text-danger small">{{ form_errors(current_internship_form.preferredCountries) }}</span>
</div>
<div class="form-group col-xs-12">
    {{ form_label(current_internship_form.internshipProgram, 'What type of training agreement will you have?', { 'label_attr': {'class': 'label-text'} }) }}
    {{ form_widget(current_internship_form.internshipProgram, { 'id': 'internship_program', 'attr': {'class': 'form-control '}}) }}
    <span class="error text-danger small">{{ form_errors(current_internship_form.internshipProgram) }}</span>
</div>
Run Code Online (Sandbox Code Playgroud)

我的代码中有错误吗?还是与选择多项选择有关?有没有人遇到过类似的问题,并且知道如何解决?

Med*_*ard 8

不能使用NotBlank上的限制EntityTypemultiple设置为true。由于数组永远不会为空。您应该尝试使用这样的count约束:

$builder
    ->add('preferredCountries', EntityType::class, array(
        'required' => false,
        'class' => 'IndexBundle:Country',
        'property' => 'name',
        'empty_value' => 'Choose',
        'multiple' => true,
        'query_builder' => function (EntityRepository $er) {
            return $er->createQueryBuilder('c')
                ->where('c.name != :name')
                ->orderBy('c.name', 'ASC')
                ->setParameter('name', 'Other');
        },
        'constraints' => array(
               new Count(array(
                   'min' => 1,
                   'minMessage' => "Should not be blank"
               ))
            )
    ))
...
Run Code Online (Sandbox Code Playgroud)