Symfony2 - NotBlank约束不适用于EntityType

时间:2016-12-12 11:14:13

标签: forms validation symfony constraints

我的表单中有两个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!!!',
            )),
        )
    ))

在这种情况下,当我提交空值时,字段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>

我的代码中是否存在错误,或者它与多项选择选择有何关联?有没有人有类似的问题,知道如何解决它?

3 个答案:

答案 0 :(得分:5)

NotBlank设置为EntityType时,multiple不能使用true约束。因为数组永远不会为null。您应该尝试使用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"
               ))
            )
    ))
...

答案 1 :(得分:0)

NotNull约束意味着值不能为null - &gt; multiple = true表示值将存储在数组中 - &gt;空数组不为空。

改为使用NotBlank约束。它完全是为了这个目的。

答案 2 :(得分:-1)

您还可以在实体级别指定

    /**
     * @Count(min = 1, minMessage = "At least one branch must be selected")
     */
    protected $multiCheckBox;