我正在使用 Twig 在 Symfony 2.3 中构建一个项目。我想向表单行 block 添加一个类。我正在使用一个表单主题文件,其中包含:
{% block form_row %}
<div class="form-row">
{{ form_label(form) }}
{{ form_widget(form) }}
{{ form_errors(form) }}
</div>
{% endblock %}
现在我的一些表单行我想添加一个额外的类
form-row-split
.我不知道如何正确地做到这一点。我让它几乎工作的方式是:{% block form_row %}
{% set attr = attr|merge({'class': 'form-row' ~ (attr.class is defined ? ' ' ~ attr.class : '') ~ (errors|length > 0 ? ' error' : '')} ) %}
<div {{ block('widget_container_attributes') }}>
{{ form_label(form) }}
{{ form_widget(form) }}
{{ form_errors(form) }}
</div>
{% endblock %}
(注意,我也留下了
error
类逻辑,因为它需要保留)。然后在表单生成器中:
$builder
->add('first_name', 'text', array(
'attr' => array(
'class' => 'form-row-split'
)
));
这几乎可以工作,但它在任何地方都添加了这个类,并将小部件 id 添加到行中!
<div id="myform_first_name" class="form-row form-row-split">
<label for="myform_first_name">First name</label>
<input id="myform_first_name" class="form-row-split" type="text" name="myform[first_name]">
</div>
我可以想到一些潜在的解决方案,但没有一个是漂亮或直接的。当然必须有一个简单的方法来做到这一点?
最佳答案
我所做的更简单(尽管可能不太干净?)。
通过字段的“数据”属性传递表单行的类:
// template.html.twig
{{ form_start(form) }}
{{ form_row(form.field, {'attr': {'data-row-class': 'my-row-class'} }) }}
{{ form_end(form) }}
然后以这种方式在表单主题模板中处理它:
// form-theme.html.twig
{% block form_row -%}
{% set row_class = attr['data-row-class'] | default('') %}
<div class="{{ row_class }}">
{{- form_label(form) -}}
{{- form_widget(form) -}}
{{- form_errors(form) -}}
</div>
{%- endblock form_row %}
这给出了这个:
<form name="formName" method="post">
<div class="my-row-class">
<label for="formName_field">Field label</label>
<input type="text" id="formName_field" name="formName[field]" data-row-class="my-row-class">
</div>
</form>
关于Symfony twig 如何将类添加到表单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23011450/