symfony的form_errors显示列表项,而不只是文本

时间:2019-02-23 19:29:21

标签: symfony symfony-forms

[Symfony 4]

我在Symfony中有以下模板代码:

{{ form_widget(registrationForm.username, {'attr': {'class': 'form-control'}}) }}
{{ form_errors(registrationForm.username) }}

不仅仅是显示错误文本,它还会生成如下列表项:

<ul><li> Username already exists </li></ul>

如何让它不生成此列表项而仅获取文本?

2 个答案:

答案 0 :(得分:2)

我猜这是正确的行为,因为您可能在一个字段中遇到多个错误,例如“用户名太短”和“字段用户名包含不适当的字符”,但是要获得第一个错误,您可以使用:

{{ form_errors(registrationForm.username|first) }}

或者您可以自定义form_errors呈现,首先为form_errors创建文件,例如your_form / custom_form_errors.html.twig:

{% block form_errors %}
    {% spaceless %}
          <div class="error">{{ errors|first }}</div>
    {% endspaceless %}
{% endblock %}

然后将其添加到您的视图文件中:

{% form_theme form 'your_form/custom_form_errors.html.twig' %}

...

{{ form_errors(registrationForm.username) }}

答案 1 :(得分:0)

只是为了扩展@Andrii Filenko的答案。您可以很容易地修改form_errors或其他任何形式的树枝功能的输出。在Symfony中称为自定义主题。

考虑一下:

// templates/register.html.twig

{% extends "base.html.twig" %}

{% form_theme registrationForm _self %}

{% block form_errors %}
  {% spaceless %}
    {% if errors|length > 0 %}
    <ul class="changed list">
        {% for error in errors %}
            <li>{{ error.message }}</li>
        {% endfor %}
    </ul>
    {% endif %}
   {% endspaceless %}
{% endblock form_errors %}

{% block body %}{% endblock %}

输出:

<ul class="changed list"><li> Username already exists </li></ul>