Проверка формы symfony2: form.errors VS form.fieldname.errors

у меня проблема с тем, как появляются ошибки.

ниже часть моего конструктора форм

->add('editions', 'entity', array(
    'multiple' => true, 
    'expanded' => true, 
    'class' => 'MyBundle:Edition', 
    'property' => 'name',
    'constraints' => new Count(array('min' => 1, 'minMessage' => 'Choose at least one edition')),
    )
)
->add('releaseDates', 'collection', array(
    'type' => new ReleaseDateFormType(),
    'allow_add'    => true,
    'allow_delete' => true,
    'by_reference' => false,
    'constraints' => new Count(array('min' => 1, 'minMessage' => 'Choose at least one release date')),
    )
)

Проверка работает, но проблема в том, что для первого поля "редакции" ошибка "привязана" к самому полю, т.е.

{{ form_errors(form.editions) }}

а для второго поля ошибка привязана к форме, а не к полю

{{ form_errors(form) }}

так как же можно присвоить ошибку полю, а не форме?


person user1112057    schedule 19.06.2013    source источник


Ответы (3)


Попробуйте добавить опцию 'error_bubbling' => false в ReleaseDates

person Michael Sivolobov    schedule 19.06.2013

Вы можете создать свой собственный валидатор, который расширяет класс count. Затем вы используете следующую функцию в своей функции проверки (вместо addViolation)

$context->addViolationAt('fieldname', 'message', array(), null);

In Symfony 2.1:
$context->addViolationAtSubPath('fieldname', 'message', array(), null);

Вы можете сделать имя поля параметром для повторного использования:

'constraints' => new Count(array('fieldname' => $fieldname, 'min' => 1, 'minMessage' => 'Choose at least one edition'))
person Flow    schedule 20.06.2013
comment
как я уже сказал, валидация работает, просто установка сообщения об ошибке в форме, но в поле, установка 'error_bubbling' => false помогает, спасибо Михаилу Сиволобову - person user1112057; 20.06.2013

Ты пробовал:

{{ form_errors(form.releaseDates) }}
person Zeljko    schedule 19.06.2013