2014-05-01 28 views
0

我想在Symfony 2中做一個自定義窗體。我有一個實體字段類型,我試圖渲染爲擴展/多個。每個實體的默認渲染類似於以下僞代碼:如何用多個字段值覆蓋Symfony 2中的實體類型標籤?

<input type="checkbox" value='$entity->id'><label>$entity->id</label> 

這很糟糕。我想獲得的symfony,從而使得各實體的東西更詳細,如:

<div> 
    <input type="checkbox" value='$entity->id'><label><strong>$entity->name</strong> 
    <div>$entity->detail</div></label> 
</div> 

的文件沒有提到如何呈現表單時訪問實體的具體領域。有沒有人有如何解決這個問題的想法?

謝謝!

+0

基本上你想定製的形式呈現,因爲這只是按照文件 - http://symfony.com/doc/current/ cookbook/form/form_customization.html –

+0

基本上是,技術上沒有。該文檔不包括如何渲染實體字段與實體窗口小部件分開。加上你添加的鏈接,根本不包括實體類型。 –

回答

1

您可以訪問像這樣的實體上的特定字段 - 第一項爲{{ form_widget(form.your_choice_field.0) }},第二項爲{{ form_widget(form.your_choice_field.1) }}等等。

your_choice_field是一個表單域,它可以是choiceentity

{{ form_widget(form.your_choice_field.0) }}允許您訪問choices數組中的單個項目。

+0

這會很有用,但我無法正常工作。它應該是'form_widget'而不是'form.widget'嗎?那麼,你能更清楚地知道「your_entity」是什麼嗎?這是實體名稱嗎?實體字段的名稱?可以說我有一個「優先級」實體,其實體字段類型稱爲「優先級」。 –

+0

更新了我的回答 – dmnptr

0

當您將entity字段添加爲described here時,您是否嘗試過添加property選項?您也可以將__toString方法添加到您的實體。

+0

這整齊地完成了我需要的一半,其餘的更加難看。我希望我能得到@dmnptr爲另一半回答的問題。這兩者一起構成一個相當優雅的解決方案 –

1

所有形式的默認佈局,如果你使用的全功能框架,是擺在

vendor\symfony\symfony\src\Symfony\Bridge\Twig\Resources\views\Form\form_div_layout.html.twig 

你可以看到發生了什麼有哪些是實體呈現爲

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

如果你想要寫一個實體字段的一行的渲染,就像@Manocho提到的那樣,你可以參考http://symfony.com/doc/current/cookbook/form/form_customization.html並覆蓋你的模板文件中的那個塊,然後添加

{% form_theme form _self %} 

所以小枝將爲複寫區塊搜索在同一樹枝文件時,它呈現在