2014-01-29 22 views
5

我有一個視圖,我試圖根據http://symfony.com/doc/current/cookbook/form/form_customization.html#how-to-customize-an-individual-field覆蓋單個字段的表單主題。小枝form_theme_self自定義個人字段

的觀點看起來是這樣的:

{% form_theme form _self %} 

{% block _my_form_foo_widget %} 
    <div class="input-append"> 
     {{ block('number_widget') }} 
     <span class="add-on">%</span> 
    </div> 
{% endblock %} 

<form> 
    {{ form_row(form.foo) }} 
    {{ form_row(form.bar) }} 
</form> 

一切看起來都如預期的foo和酒吧行,然而,_my_form_foo_widget塊本身也包含在輸出中,即:

<div class="input-append"> 
    <span class="add-on">%</span> 
</div> 

<form> 
    <div> 
     <label for="my_form_foo">Bar</label> 
     <div class="input-append"> 
      <input type="text" id="my_form_foo" name="my_form[foo]"> 
      <span class="add-on">%</span> 
     </div> 
    </div> 
    <div> 
     <label for="my_form_bar">Foo</label> 
     <input type="text" id="my_form_bar" name="my_form[bar]"> 
    </div> 
</form> 

我不知道我做錯了什麼。作爲一種解決方法,我只是用HTML註釋封裝了這個塊。

我在Symfony 2.4.1和Twig 1.15.0上。

+0

沒有你清除緩存?也許這是一個與'%'符號有關的樹枝解析錯誤。你有沒有嘗試將''中的'%'改爲另一個字符(即'+')呢?如果有效,你可以嘗試用'{{'%'}}'替換'%'。此外,您可以嘗試將覆蓋區塊移至不同的模板(即'form_theme.html.twig')並使用'{%form_theme form'form_theme.html.twig'%}' – nifr

+0

@nifr清除緩存並更改「 %'對其他事物沒有影響。 – enoshixi

+0

你沒有嘗試我的建議與外部form_theme :)你不擴展另一個模板 - 這就是爲什麼直接渲染塊。 – nifr

回答

8

您正在遇到twig的預期行爲。

如果您不是將另一個模板擴展爲,則新定義的塊將直接呈現在當前模板中。


實施例:

template_A.html.twig

  • 具有主體(=碼塊之外)=>塊直接呈現

<html> 
<body> 
{% block content -%} 
Foo 
{%- endblock -%} 

Bar 

{%- block more_content -%} 
Foo 
{%- endblock %} 
</body> 
</html> 

=>輸出:FooBarFoo(全部的存在於模板+體塊所呈現)


實施例:

template_B.html.twig

  • 延伸模板不允許具有主體
  • 將僅呈現存在於template_A.html.twig中的塊

{% extends 'templateA.html.twig' %} 

{% block content -%} 
Bar 
{%- endblock %} 

{% block not_in_template_a %} 
Some String 
{% endblock %} 

=>輸出:BarBarFoo(但不呈現因爲Some Stringnot_in_template_a是不存在的原始模板)

+2

謝謝。我最終創建了一個帶有單個空塊的模板並從中繼承。 我會爭辯說Symfony在他們的文檔中的例子是誤導性的(或者顯然不正確)。 – enoshixi

+0

是的,我認爲應該更好地記錄:https://github.com/symfony/symfony-docs/issues/5475 – MacDada