Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在“;表格”;当错误发生时_Php_Symfony_Twig - Fatal编程技术网

Php 在“;表格”;当错误发生时

Php 在“;表格”;当错误发生时,php,symfony,twig,Php,Symfony,Twig,当发生错误(特定于字段)时,我想在form_widget()上添加一个CSS类 目前,我有以下代码: {{ form_widget(form.firstName, {'attr': {'class': 'text-input'}}) }} 它生成以下HTML代码: <input type="text" id="userbundle_member_firstName" name="userbundle_member[firstName]" required="required" class

当发生错误(特定于字段)时,我想在form_widget()上添加一个CSS类

目前,我有以下代码:

{{ form_widget(form.firstName, {'attr': {'class': 'text-input'}}) }}
它生成以下HTML代码:

<input type="text" id="userbundle_member_firstName" name="userbundle_member[firstName]" required="required" class="text-input" />

这很好,但我想当错误发生时(例如值太短),会添加一个css类。所以,我想要这样的东西:

<input type="text" id="userbundle_member_firstName" name="userbundle_member[firstName]" required="required" class="text-input error-input" />

我试着在文档上搜索解决方案(尤其是),但我一直无法做到我想要的


谢谢你的帮助:D

告诉Twig有关自定义表单模板的信息:

app/config/config.yml

twig:
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%
    form:
        resources:
            - 'YourBundle::form.html.twig'
并覆盖它们(检查vendor/symfony/symfony/src/symfony/Bridge/Twig/Resources/views/Form):

src/YourBundle/Resources/views/form.html.twig

{% block form_widget_simple %}
{% if form.vars.errors|length > 0 %}
{% set class = attr.class is defined ? attr.class ~ ' error' : 'error' %}
{% set attr = attr|merge({'class': class}) %}
{% endif %}
{% spaceless %}
    {% set type = type|default('text') %}
    <input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
{% endspaceless %}
{% endblock form_widget_simple %}
{%block form\u widget\u simple%}
{%if form.vars.errors | length>0%}
{%set class=attr.class已定义?attr.class~'error':'error%}
{%set attr=attr | merge({'class':class})%}
{%endif%}
{%spaceless%}
{%set type=type | default('text')%}
{%endspaceless%}
{%endblock form_widget_simple%}
更新


上述方法将更改所有表单片段的呈现,如果您只需要更改某些表单,则可以在本地执行,只需阅读文档()

告诉Twig有关自定义表单模板的信息:

app/config/config.yml

twig:
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%
    form:
        resources:
            - 'YourBundle::form.html.twig'
并覆盖它们(检查vendor/symfony/symfony/src/symfony/Bridge/Twig/Resources/views/Form):

src/YourBundle/Resources/views/form.html.twig

{% block form_widget_simple %}
{% if form.vars.errors|length > 0 %}
{% set class = attr.class is defined ? attr.class ~ ' error' : 'error' %}
{% set attr = attr|merge({'class': class}) %}
{% endif %}
{% spaceless %}
    {% set type = type|default('text') %}
    <input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
{% endspaceless %}
{% endblock form_widget_simple %}
{%block form\u widget\u simple%}
{%if form.vars.errors | length>0%}
{%set class=attr.class已定义?attr.class~'error':'error%}
{%set attr=attr | merge({'class':class})%}
{%endif%}
{%spaceless%}
{%set type=type | default('text')%}
{%endspaceless%}
{%endblock form_widget_simple%}
更新


上面描述的方法将更改所有表单片段的呈现,如果您只需要更改某些表单,那么您可以在本地执行,只需阅读文档()

这将覆盖任何已经存在的表单模板。我们只需要注入一个类,而不是重新定义呈现。@afilina,您可以在避免全局更改的地方更改表单片段的呈现,请选中@afilina,您刚才投了我的反对票吗?我的答案是正确的,这不是一个坏的做法,如果你需要另一件事,只需阅读文档或在这里问。“Afina,现在有一个小注意这一点,请考虑投票。”Afina,很遗憾没有看到你的反馈后,花时间澄清。(考虑到答案之前是有效的,你不应该仅仅因为它不符合你的需要而投反对票)。这会覆盖任何已经存在的表单模板。我们只需要插入一个类,而不是重新定义呈现。@afilina,您可以在避免全局更改的地方更改表单片段的呈现,请选中@afilina,您刚才是否投了我的反对票?我的回答是正确的,这不是一个坏做法,如果您需要其他东西,请阅读文档或者在这里问。“Afina,现在有一个关于这个的小提示,请考虑一下投票。”Afina,很抱歉在花时间澄清这个问题之后,没有看到你的反馈(考虑到之前的答案是有效的,你不应该因为它不符合你的需要而下注)。