1

オーバーライドしようとしている Twig フィールドは次のとおりです: github

このカスタム フォーム テーマで変更されたチェックボックスのリストがあります。

{% block choice_widget_expanded %}
{% spaceless %}
    <div {{ block('widget_container_attributes') }}>
    {% for child in form %}
        <div class="checkbox_row">
        {{ form_widget(child) }}
        {{ form_label(child) }}
        </div>
    {% endfor %}
    </div>
{% endspaceless %}
{% endblock choice_widget_expanded %}

を使用してクラスを追加しようとしました{{ form_row(form.fieldName), {'attr':{'class':'myclass'}}) }}

しかし、それはにクラスを追加するだけdiv#formName_fieldNameです。次にカスタムブロックを追加してみました

{% block _formName_fieldName_widget %}
{% spaceless %}
    <input type="checkbox" {{ block('widget_attributes') }} value="{{ value }}"  class="myclass_{{ value }}" />

{% endspaceless %}
{% endblock choice_widget_expanded %}

myclass_1, myclass_2必要な値なども含めていることに注意してください。

これの問題は、ブロックが配列を受け取るため、次のようになることです

{% block _fb_post_facebook_pages_widget %}
{% spaceless %}
    <div {{ block('widget_container_attributes') }}>
    {% for child in form %}
        {{ form_widget(child) }}
        {{ form_label(child) }}
    {% endfor %}
    </div>
{% endspaceless %}
{% endblock choice_widget_expanded %}

しかし、特定のチェックボックスにクラスを追加したい場合は、次のように記述する必要があります。

{% block _formName_fieldName_X_widget %}
{% spaceless %}
    <input type="checkbox" {{ block('widget_attributes') }} value="{{ value }}"  class="myclass_{{ value }}" />

{% endspaceless %}
{% endblock choice_widget_expanded %}

ここで、X は fieldName の値になります...そして明らかに値は何でもかまいませんので、1-1000000000000 のすべての値のブロックを作成することはできません...

これを動的に行う方法はありますか?

4

1 に答える 1

0

Twig を拡張する必要があると思います。その後、PHP でコードを指定し、条件を取り込むことができます。

http://twig.sensiolabs.org/doc/advanced.html

于 2013-10-11T20:53:52.623 に答える