Symfony 4中自定义表单错误

4
在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>

我阅读了这个页面《如何自定义表单渲染》,但我不理解它是如何工作的。
有什么想法吗?谢谢。

我已经回答过有关覆盖表单模板的问题了,您可以在此处查看答案:https://stackoverflow.com/a/48279247/5064866,在您的情况下,您可以全局设置您将创建的主题,我在答案中提供了文档链接。 - knetsi
2个回答

5

文档 描述了如何全局配置错误输出

您可以使用

{% 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 %}

{% form_theme form 'form/form_errors.html.twig' %} 是正确的。这些括号是语法错误。它们仅用于多个模板 - https://symfony.com/doc/current/form/form_customization.html#multiple-templates - pevac

1
你可以做到这一点:

<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'],其中包含提交表单后的所有错误。您可以检索此数据并分别显示错误。

链接表单呈现自定义与如何自定义系统中表单模板有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接