1

我想通过树枝为我的日期字段中的选择字段设置一个属性。理想情况下,我会有一段看起来像这样的代码:

{% 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 中执行此操作?

4

2 回答 2

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 }}) }}

另一种方法是形式主题

于 2013-09-02T20:23:46.947 回答
0

其他几个选项:

使用 TWIG 将 ID 放到父 div 标签上

这意味着您需要调整您正在使用的 JS / CSS。

{{ form_row(myForm.myDate, { 'attr': {'class': myForm.myDate.vars.id} } )

使用 CSS 伪选择器:

您不太可能只想设置输出样式(您正在填充 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 提供类,但我不会。

于 2013-09-02T23:14:24.733 回答