我想通过twig为我的日期字段中的选择字段设置一个属性。理想情况下,我会有一段看起来像的代码:
{% setAttribute(myForm.myDate.day, {'attr': {'p-class': myForm.myDate.vars.id }}) %}
{% setAttribute(myForm.myDate.month, {'attr': {'p-class': myForm.myDate.vars.id }}) %}
{% setAttribute(myForm.myDate.year, {'attr': {'p-class': myForm.myDate.vars.id }}) %}
{{ form_row(myForm.myDate) }}
如何在twig / symfony2中执行此操作?
答案 0 :(得分:1)
其中一种方法是单独输出每个字段:
{{ form_widget(myForm.myDate.day, {'attr': {'p-class': myForm.myDate.vars.id }}) }}
{{ form_widget(myForm.myDate.month, {'attr': {'p-class': myForm.myDate.vars.id }}) }}
{{ form_widget(myForm.myDate.year, {'attr': {'p-class': myForm.myDate.vars.id }}) }}
另一种方式是form theming。
答案 1 :(得分:0)
其他几个选项:
使用TWIG
将ID放入父div标签这意味着你需要调整你正在使用的JS / CSS。
{{ form_row(myForm.myDate, { 'attr': {'class': myForm.myDate.vars.id} } )
使用CSS pseduo选择器:
你不太可能只想设置输出的样式(你正在填充ID),但你总是可以使用CSS选择器来设置样式
<div class="some-selector">
<select><option>YEAR</option></select>
<select><option>MONTH</option></select>
<select><option>DAY</option></select>
</div>
.some-selector select { color: green; }
.some-selector select + select { color: red; }
.some-selector select + second + select { color: blue; }
这是一个小提琴:http://jsfiddle.net/FFpJ8/
形成主题
正如Elnur所说,你也可以使用表格主题:http://symfony.com/doc/current/cookbook/form/form_customization.html 默认主题可以在https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig
看到因此,您可以在自己的主题中覆盖date_widget,并根据需要添加id。
{% block date_widget %}
{% spaceless %}
{% if widget == 'single_text' %}
{{ block('form_widget_simple') }}
{% else %}
<div {{ block('widget_container_attributes') }}>
{{ date_pattern|replace({
'{{ year }}': form_widget(form.year),
'{{ month }}': form_widget(form.month),
'{{ day }}': form_widget(form.day),
})|raw }}
</div>
{% endif %}
{% endspaceless %}
{% endblock date_widget %}
<强> JS 强>
您可以在页面加载后使用JS提供类,但我不会。