自定义表单错误symfony 4

时间:2018-01-21 23:52:26

标签: symfony twig symfony-forms

在Symfony 4中,当你做类似的事情时:

<div>
    {{ form_label(form.something) }}
    {{ form_errors(form.something) }}
    {{ form_widget(form.something) }}
</div> 

显示以下内容:

<div>
    <label for="form_something">Something</label>
    <ul>
        <li>This field is required</li>
        <li>Another error</li>
    </ul>
    <input type="text" id="form_something" name="form[something]" />
</div>

我希望能够自定义错误的显示方式。

而不是以这种方式显示:

<ul>
    <li>This field is required</li>
    <li>Another error</li>
</ul>

我希望这样:

<div class="form-control-feedback">This field is required</div>
<div class="form-control-feedback">Another error</div>

Y阅读本页How to Customize Form Rendering,但我无法理解它是如何运作的。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:1)

The documentation描述了如何全局配置错误输出

使用

渲染它
{% form_theme form 'form/form_errors.html.twig' %}

{# ... #}
{{ form_errors(form.something) }}

档案form/form_errors.html.twig

{% block form_errors %}
    {% spaceless %}
          {% for error in errors %}
                <div class="form-control-feedback">{{ error.message }}</div>
          {% endfor %}
    {% endspaceless %}
{% endblock %}

答案 1 :(得分:0)

你可以这样做:

<div class="form">
    <label class="control-label">{{ form_label(form.something) }}</label>
    {{ form_widget(form.something, { 'attr': {'class' : 'form-control'}}) }}
    {% if form.something.vars['errors']|length > 0 %}
        <ul class="message">
            {% for error in form.something.vars['errors'] %}
                <li>{{ error.message }}</li>
            {% endfor %}
        </ul>
    {% endif %}
</div>

查看整个代码,您会找到一些问题的答案。

表单的每个属性或字段都有vars属性,这会存储一些数据,包括['errors'],其中包含您提交表单后的所有错误。您可以检索此数据并单独显示错误。

链接Form Rendering Customization与如何自定义系统中表单的模板有关。