Как отобразить все (или отдельные) ошибки в форме с помощью Twig (или в контроллере) в Symfony 3

Благодаря Twig, теперь шаблоны с Symfony действительно просты в обращении и понимании. Тем не менее, документация Symfony не проясняет много основных задач, которые вы, вероятно, не знаете, как решить мгновенно.

В этом случае мы покажем, как получать и отображать ошибки форм в Symfony 3.

прут

Перечислите все ошибки в форме

Чтобы перечислить все ошибки формы в виде ветки, вам нужно сначала проверить, есть ли ошибки при проверке form.vars.valid имущество. Затем переберите все дочерние элементы формы и напечатайте на ней все ошибки.

{#
If the form is not valid then :
Note: in this case the form variable is : form
#}
{% if not form.vars.valid %}
    {# Loop through every form item #} {% for child in form.children %} {# Display the errors of the form item #} {%for error in child.vars.errors%}
  • {{error.message}}
  • {%endfor%} {%endfor%}
{%endif%}

Ошибка одного элемента

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

{{ form_start(form) }}
{{ form_widget(form.subject) }}
{{ form_errors(form.subject) }}
{{ form_widget(form.name) }}
{{ form_errors(form.name) }}
{{ form_widget(form.email) }}
{{ form_errors(form.email) }}
{{ form_widget(form.message) }}
{{ form_errors(form.message) }}
{{ form_end(form) }}

В этом случае, когда форма отправлена ​​и форма недействительна в соответствии с ее ограничениями в FormType, вы увидите сообщение об ошибке при каждом ее вводе.

Неправильная форма ветки Symfony 3

Контроллер (PHP)

Чтобы получить все ошибки формы в PHP, вы можете использовать метод getErrors, который можно вызывать непосредственно в форме или элементе формы.

getErrors();
// a FormErrorIterator instance, but only errors attached to the
// "subject" field
$errors = $form['subject']->getErrors();
// a FormErrorIterator instance in a flattened structure
// use getOrigin() to determine the form causing the error
$errors = $form->getErrors(true);
// a FormErrorIterator instance representing the form tree structure
$errors = $form->getErrors(true, false);

Вы можете выбрать для этой опции, если вы предпочитаете PHP вместо Twig или вы хотите обернуть всю вашу информацию в контроллере и затем отобразить ее в виде.

Повеселись !

Ссылка на основную публикацию
Adblock
detector