2012-01-10 3 views
0

Я бы хотел показать сообщение об ошибке в поле, для которого оно предназначено. Я знаю, как поместить сообщение об ошибке в поле, но я хочу найти динамический способ проверки после повторного представления, если вставленное значение не является самим сообщением об ошибке. Я использую аннотации доктрины. Например, если поле «title», сообщение об ошибке будет «Заголовок должен быть заполнен!». Итак, поле заголовка больше не пустое, я снова нажимаю кнопку «Отправить», и он действителен сейчас. Я не хочу проверять каждое поле, как if $entity->getTitle() == "The title must be filled" ... Мне удалось сделать это, не отображая div div div в ветке и jquery, но я хочу знать, есть ли лучший способ сделать это с контроллера ? СпасибоСообщение об ошибке Symfony2 в поле ввода

+0

Просто идея: вы можете удалить ошибки с помощью jQuery перед отправкой формы. –

+0

Я сделал это именно так, но я думаю, что было бы лучше сделать это прямо с контроллера, поэтому я спрашиваю, как это возможно, если это так. – Matthew87

ответ

1

Вы спрашиваете, как правильно сделать что-то не так ... Если входное значение не является значением, которое вы хотите обработать, оно не должно было начинаться с начала. Это, как говорится, я уверен, что у вас есть причины ...

Вам необходимо выслушать FormEvents::BIND_CLIENT_DATA и очистить данные формы, если она соответствует вашей строке ошибки.

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('title'); 
    $builder->get('title')->addEventListener(
     FormEvents::BIND_CLIENT_DATA, 
     function(FilterDataEvent $event) 
     { 
      if ('The title must be filled' == $event->getData()) { 
       $event->setData(''); 
      } 
     }, 
    ); 

Если вы хотите применить это поведение во всем мире необходимо подключить этот приемник с помощью расширения формы типа, который расширяет 'field'. Вам также необходимо проанализировать все возможные сообщения об ошибках проверки для текущего поля с помощью валидатора и передать их через переводчик, а затем сравнить результаты с данными события.

+0

Это почти то же самое, если я проверяю его в контроллере, вам нужно проверять каждое поле по одному. Я хочу что-то вроде проверки того, что является сообщением об ошибке поля, и если это значение поля, то оно недействительно. Поэтому динамически проверяйте все утверждения, а не один за другим. Спасибо за ваш ответ в любом случае – Matthew87

+0

Я обновил свой ответ, чтобы описать, как вы могли это сделать, но я не могу сделать это за вас: P –

+0

Спасибо, я постараюсь это сделать! – Matthew87