Php Symfony 3:仅在出现错误时自定义类输入字段

Php Symfony 3:仅在出现错误时自定义类输入字段,php,forms,symfony,Php,Forms,Symfony,通常,我们可以从中自定义输入字段的属性类 小枝 {{ form_widget(form.username,{'attr':{ 'class':'input', 'placeholder':'Write your username' }}) }} 但是如何根据这个字段有错误的事实来添加类呢 例如,如果在提交过程中遇到错误,我希望我的输入标记有一个额外的类“is danger”我通过在以下内容之前设置变量找到了解决方法: {% if fo

通常,我们可以从中自定义输入字段的属性类 小枝

{{ form_widget(form.username,{'attr':{
       'class':'input',
       'placeholder':'Write your username'
    }}) }}
但是如何根据这个字段有错误的事实来添加类呢


例如,如果在提交过程中遇到错误,我希望我的输入标记有一个额外的类“is danger”

我通过在以下内容之前设置变量找到了解决方法:

            {% if form_errors(form.username) is not empty %}
                    {% set class = "input is-danger" %}
                {% else %}
                    {% set class = "input" %}
                {% endif %}
                {{ form_widget(form.username,{'attr':{
                    'class':class,
                    'placeholder':'Write your username'
                }}) }}

但是,在模板中发布所有这些内容有点麻烦。

我通过在以下内容之前设置变量找到了解决方法:

            {% if form_errors(form.username) is not empty %}
                    {% set class = "input is-danger" %}
                {% else %}
                    {% set class = "input" %}
                {% endif %}
                {{ form_widget(form.username,{'attr':{
                    'class':class,
                    'placeholder':'Write your username'
                }}) }}

但是,在模板中发布所有这些内容有点麻烦。

您可以使用宏改进您的解决方法:

{% macro inputClass(field) %}
{% spaceless %}
    class="input{% if form_errors(field) is not empty %} is-danger{% endif %}"
{% endspaceless %}
{% endmacro %}
然后

{{ form_widget(form.username, {'attr': {
    'class': inputClass(form.username),
    'placeholder': 'Write your username'
}}) }}

如果你想要一个更全球化的解决方案,你应该能够。或者,您可以自定义
form_errors()
调用,而不需要将该类添加到小部件本身,而不是将属性放在主小部件上。

您可以使用宏改进您的解决方法:

{% macro inputClass(field) %}
{% spaceless %}
    class="input{% if form_errors(field) is not empty %} is-danger{% endif %}"
{% endspaceless %}
{% endmacro %}
然后

{{ form_widget(form.username, {'attr': {
    'class': inputClass(form.username),
    'placeholder': 'Write your username'
}}) }}

如果你想要一个更全球化的解决方案,你应该能够。或者,您可以自定义
form_errors()
调用,而不是将该属性放在主小部件上,而不需要将该类添加到小部件本身。

您尝试过我的宏解决方案吗?它有点干净。你有没有试过我的宏解决方案?它把它弄干净了一点。