Проверка корректности поля Symfony2 Choice

У меня есть форма в Symfony 2.7.10, определение которой выглядит так:

<?php // ... class RecipeType extends AbstractType { // ... /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder // ... ->add('meal_schema', 'choice', [ 'label' => 'Mealtime schema', 'choices' => [ 'breakfast' => 'Breakfast', 'second_breakfast' => 'Second breakfast', 'lunch' => 'Lunch', 'dinner' => 'Dinner', 'snack' => 'Snack', 'supper' => 'Supper', ], 'multiple' => true, 'expanded' => true, 'label_attr' => ['class' => 'col-md-2'], 'required' => true, ]) } // ... } 

Вот как выглядит проверка в файле validation.yml:

 My\Real\Namespace\Entity\Recipe: properties: name: - NotBlank: ~ mealSchema: # Look below 

Проверяется проверка поля имени, но проверка валидации еды не выполняется . Настройки, которые я уже пробовал без успеха:

 # This one works but assigns error to form instead of field so it's displayed on top of the page - NotBlank: message: Mealtime schema should not be blank # This doesn't work - Choice: callback: [RecipeMealSchemaChoices, getChoiceKeys] # This method isn't even called min: 1 minMessage: "Please select meal schema" # This also doesn't work - Count: min: 1 max: 99 minMessage: Mealtime schema should not be blank maxMessage: Max meal time exceeded 

Хорошо, я решил.

Моя ошибка заключалась в том, чтобы не предоставлять информацию о поле mealSchema в моем объекте при запросе на stackoverflow. Если бы я сделал это, я бы понял, что поле сущности на самом деле smallint .

Мой коллега хотел подражать типу поля MySQL «SET» в Doctrine, поэтому он использовал массив в качестве значений точки входа и преобразовал его в битовые значения в методе setter (и наоборот в методе getter).

Вот почему ни один из правил валидации, связанных с выбором, не работал. На данный момент я сделал 2 быстрых решения:

  1. Измените имена всех полей в RecipeType от подчеркивания до camelCase, потому что именно так они названы в нашей сущности. Это помогло ошибке привязаться к форме вместо поля.

  2. Использовал валидатор NotNull поскольку значение по умолчанию для mealSchema было null , а не пустым массивом.