我正在尝试自定义Symfony2表单呈现,以便为每个生成的选择添加一个类。 我认为有一个自定义的form_div_layout.html.twig:
{% block choice_widget_collapsed %}
{% spaceless %}
<select class='myclass' {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %}>
{% if empty_value is not none %}
<option value="">{{ empty_value|trans({}, translation_domain) }}</option>
{% endif %}
{% if preferred_choices|length > 0 %}
{% set options = preferred_choices %}
{{ block('choice_widget_options') }}
{% if choices|length > 0 and separator is not none %}
<option disabled="disabled">{{ separator }}</option>
{% endif %}
{% endif %}
{% set options = choices %}
{{ block('choice_widget_options') }}
</select>
{% endspaceless %}
{% endblock choice_widget_collapsed %}
并将其与
一起使用{% form_theme form 'YOPYourOwnPoetBundle:Form:form_div_layout.html.twig' %}
会做到这一点。
但是,类'myclass'未添加到select中。 我做错了什么?
答案 0 :(得分:4)
您应首先确保您尝试使用的主题文件与您在form_theme
表达式中使用的名称具有相同的名称,并且文件确实存在。我不记得Twig是否会抛出异常,以防这些异常与之匹配。
此外,您可能在构建表单或呈现表单时意外传递了class
属性。会发生什么是您的元素现在有两个class
属性。
解决方法是将新类实际添加到现有类的集合中。
{% block choice_widget_collapsed %}
{% spaceless %}
{% set label_attr = label_attr|merge({class: label_attr.class|default('') ~ ' required'}) %}
{% set attr = attr|merge({class: (attr.class|default('') ~ ' myclass')|trim}) %}
<select {{ block('widget_attributes') }}{% if multiple %} multiple="multiple"{% endif %}>
{# ... #}
</select>
{% endspaceless %}
{% endblock choice_widget_collapsed %}
这允许您稍后添加特定元素可能需要的任何可选类。
修改强>
看看Sf2 Github的消息,似乎主题文件最近已被更改。在版本2.0。*中,您应该在版本2.1中覆盖choice_widget
。*正确的块是choice_widget_collapsed
。
答案 1 :(得分:0)
我想您应该将表单主题行更改为:
{% form_theme form 'YOPYourOwnPoetBundle:Form:form_div_layout.html.twig' %}
或者您需要将twig文件的名称更改为fields.html.twig
两者都必须匹配。