2013-03-19 109 views
1

我創建創建自定義表單類型的顯示星星評級,(基本上五個單選按鈕)。我爲渲染創建了一個自定義塊:Symfony2:如何覆蓋擴展選項字段中的radio_widget塊?

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

此塊使用默認的radio_widget塊渲染五個單選按鈕。

{% block radio_widget %} 
    {% spaceless %} 
     <input type="radio" {{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} /> 
    {% endspaceless %} 
{% endblock radio_widget %} 

我需要知道如何覆蓋radio_widget塊添加一些類和屬性,但只有當內部star_rating_block渲染。

回答

2

您可以通過第二個參數將變量傳遞給form_widget。你基本上會允許你的自定義類型中的一組選項,並將它們傳遞給樹枝函數。

{{ form_widget(child, {attr: {class: classNameVar}}) }} {# passing some classes through the variable classNameVar 

你可以在the documentation about twig template form function and variable reference找到更多的信息。

在相同的文檔中,您可以找到有關不同form variables的信息。

4

可能的解決辦法:

{% block radio_widget %} 
    {% if "custom_widget" in form.parent.vars.block_prefixes %} 
     // custom view 
    {% else %} 
     // default view from form_div_layout.html.twig 
    {% endif %} 
{% endblock radio_widget %} 
+0

好,但應該只是 「自定義」(塊前綴)沒有 「_widget」 的一部分。而默認視圖可以是{{ - parent() - }} – martti 2017-10-27 07:53:39