Ignas Damunskis
Ignas Damunskis

Reputation: 1514

Symfony2 - NotBlank constraint not working on EntityType

I have two EntityType fields in my form and both has NotBlank constraint assigned to them.

Now, I have this issue that NotBlank constraint is not working only on one field with multiple => true set on.

$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!!!',
            )),
        )
    ))

In this case when I submit empty values, field internshipProgram get an error, and prefferedCountries not.

Form display:

<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>

Is there a mistake in my code or is it somehow related to multiple choice selection? Has anyone had similar issue and know how to solve it?

Upvotes: 2

Views: 4143

Answers (2)

Kiran
Kiran

Reputation: 1210

Also you can specify at Entity level,

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

Upvotes: -1

Medard
Medard

Reputation: 1059

You can't use NotBlank constraint on EntityType with multiple set to true. As the array will never be null. You should try using the count constraint like this:

$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"
               ))
            )
    ))
...

Upvotes: 11

Related Questions