Проверка поля даты в подчиненной форме

У меня есть основная форма, которая включает в себя ряд подчиненных форм. Одна из подформ содержит пару полей даты для ввода диапазона дат. Я создал классы сущностей и классы форм и соответствующим образом обновил services.yml.

Форма отображается нормально. Проблема в том, что поля даты не проверяются при отправке формы. Я могу оставить их пустыми или поместить в них все, что мне нравится, и я никогда не получаю ошибку проверки. Я протестировал проверку поля даты в форме верхнего уровня, и она сработала, как и ожидалось.

Для тестирования я создал простую форму и подчиненную форму. Основная тестовая форма имеет два поля: текстовое поле и поле подчиненной формы. Подформа имеет два поля: поле даты и поле флажка.

Что касается реального случая, я создал классы сущностей и форм и обновил services.yml. Форма отображается нормально. Поле даты не генерирует ошибок, когда форма отправляется с неверной датой.

Я попытался указать проверку с помощью аннотаций в классах сущностей, атрибут ограничений в вызове метода $builder->add() и то и другое одновременно ;-)

Текущий вызов add() для поля даты выглядит следующим образом:

    ...
      ->add( 'date',
             'date',
             [
               'attr'            => [ 'placeholder' => 'a date (mm/dd/yyyy)' ],
               'error_bubbling'  => true,
               'format'          => 'MM/dd/yyyy',
               'html5'           => false,
               'input'           => 'datetime',
               'invalid_message' => 'Invalid date (use mm/dd/yyyy)',
               'label'           => false,
               'widget'          => 'single_text',
               'constraints'     =>
                 [
                   new NotBlank(),
                   new Type( '\DateTime' )
                 ]
             ] )
    ...

Предложения?

Среда:
— PHP V5.5.9
— Symfony V2.7.4
— Twig V1.21.2


person David Patterson    schedule 09.09.2015    source источник


Ответы (2)


При добавлении SubFormType к MainForm выполните следующие действия для проверки подчиненных форм:

$builder->add('sub_form', new SubFormType, array(
         'constraints' => array(
          new Valid()
         ));

Надеюсь, это поможет :)

person Lost Koder    schedule 10.09.2015
comment
Амин, я добавил ограничение в определение поля подчиненной формы в основной форме. Нет радости. Я должен был запомнить это сам. Пришлось сделать это для других проектов, чтобы проверить любые поля подчиненной формы. Поля даты - единственные, с которыми у меня была эта проблема. - person David Patterson; 10.09.2015

Помимо добавления ограничения Valid() в поле подчиненной формы в основной форме, все сводится к атрибутам error_bubbling.

Поля в подчиненной форме должны быть установлены для error_bubbling true, чтобы перемещать любые ошибки в поле подчиненной формы в основной форме.

Для поля подчиненной формы в основной форме необходимо установить error_bubbling false, чтобы связать любые ошибки подчиненной формы с полем подчиненной формы.

Благодаря использованию отладчика и разумных тегов {{ dump() }} я наконец понял, что ошибки подчиненной формы добавляются к глобальной коллекции ошибок основной формы.

person David Patterson    schedule 11.09.2015