Я думаю, что это простой вопрос. О выпуске ошибок. Это мой файл с twig:
<table> <tr> <td>{{ form_label(form.dueDate) }}</td> <td>{{ form_widget(form.dueDate) }}</td> <td>{{ form_errors(form.dueDate) }}</td> </tr> <tr> <td>{{ form_label(form.task) }}</td> <td>{{ form_widget(form.task) }}</td> <td>{{ form_errors(form.task) }}</td> </tr> </table>
Теперь каждая ошибка отображается (td с помощью form_errors ()) как:
<ul> <li> Это значение не должно быть пустым </ li> </ ul>
- Переадресация laravel при входе в систему
- php chr с значениями unicode
- Как обновить плагин wordpress за определенный промежуток времени, который я выбрал?
- Формулы для вычисления геопространственности
- Вопрос синтаксиса PHP: что означает знак вопроса и двоеточие?
- E_NOTICE? == E_DEBUG, избегая isset () и @ с более сложным error_handler
Мой вопрос: я хочу вывести ошибку как обычный текст (без ul и li).
Я знаю, что есть пример:
{% for error in errors %} {{ error.message }} {% endfor %}
Но это будет выводить ошибки один за другим. Я хочу показать их там, где конкретный вход:
<td> {{myErrorFor form.dueDate}} </ td>
Большое спасибо за любую помощь
Вы можете настроить способ визуализации ошибок формы, предоставив свою собственную тему field_errors
блоку field_errors
.
Вы можете сделать это только для текущего шаблона:
{# tell the form to look for theme blocks in the current template #} {% form_theme form _self %} {% block field_errors %} {% for error in errors %} {{ error.messageTemplate|trans(error.messageParameters, 'validators') }}<br> {% endfor %} {% endblock %} {# the rest of your template... #}
Или, задав тему глобальной формы в config.yml
:
twig: form: { resource: "::form_theme.html.twig" }
В этом случае вам нужно переместить блок field_errors
выше в app/Resources/views/form_theme.html.twig
и тег form_theme
больше не нужен.
Вот мое решение. Я решил создать массив с ошибками и передать его в представление (twig). Мне потребовалось некоторое время, чтобы выяснить, как получить сообщения об ошибках … но здесь мы идем:
// Controller example: public function indexAction(Request $request) { $task = new \Michael\MikeBundle\Entity\Task(); $task->setTask('Write a blog post'); $task->setDueDate(new \DateTime('tomorrow')); $form = $this->createFormBuilder($task) ->add('task', 'text', array('attr' => array('title' => 'Enter Task'))) ->add('dueDate', 'date', array( 'widget' => 'single_text', 'required' => false, 'attr' => array('title' => 'Insert due date'))) ->getForm(); // If user submitted code if ($request->getMethod() == 'POST') { // Get form part from request $request->request->get('form'); // Bind request into the form $form->bindRequest($request); } // Pass into the view return array('errors' => $this->_getErrors($form), 'form' => $form->createView()); } protected function _getErrors($form) { // Validate form $errors = $this->get('validator')->validate($form); // Prepare collection $collection = array(); // Loop through each element of the form foreach ($form->getChildren() as $key => $child) { $collection[$key] = ""; } foreach ($errors as $error) { $collection[str_replace("data.", "", $error->getPropertyPath())] = $error->getMessage(); } return $collection; }
Важной частью является метод _getErrors ($ form), поскольку он возвращает такой массив (если есть ошибки)
$ errors ['task'] = Это значение не должно быть пустым
$ errors ['dueDate'] = ""
И вот ветка:
<table> <tr> <td>{{ form_label(form.dueDate) }}</td> <td>{{ form_widget(form.dueDate) }}</td> <td>{{ errors[form.dueDate.vars["name"]] }}</td> </tr> <tr> <td>{{ form_label(form.task) }}</td> <td>{{ form_widget(form.task) }}</td> <td>{{ errors[form.task.vars["name"]] }}</td> </tr> </table>
Надеюсь, он достаточно ясен. Дайте мне знать, если вам нужна помощь.
Пожалуйста, напишите ответ, если есть более простой способ сделать это.
Не могу добавить комментарии, но я хотел бы обновить ответ Криса Валлсмита. В настоящее время этот блок называется form_errors
, поэтому в третьей строке он должен быть {% block field_errors %}
. Мне потребовалось некоторое время, чтобы расследовать, надеюсь, кто-то выиграет от этого.
Еще одно простое решение (проверено на symfony 3):
{% for error in form.username.vars.errors %} {{ error.message }} <br/> {% endfor %}
Замените «имя пользователя» на поле формы.