2016-08-03 49 views
0

我正在設計一個調查實體的應用程序。每個調查可以有多個SurveyQuestion實體(表單中的CollectionType,調查問卷屬性 - >問題),每個SurveyQuestion可以有多個SurveyAnswer實體(SurveyQuestion-> availableAnswers)。SF2 Twig:如何自定義CollectionType中嵌入的CoolectionType的渲染?

表格在SurveyType,QuestionType和AnswerType中進行邏輯分佈。

如何爲availableAnswers設置模板片段?

我看了看周圍2線索:

首先,form_theme針對特定類型:在調查表枝杈

{# Theming for questions #} 
{% form_theme form.questions 'LCHModuleBundle:Survey/form:question.html.twig' %} 

{# Theming for answers #} 
{#{% form_theme form.availableAnswers 'LCHModuleBundle:Survey/form:answer.html.twig' %}#} 

看起來無法訪問availableQuestions因爲它是一個字段從問題一個項目採集。

其次,塊命名(根據this):

在調查表樹枝:

{% form_theme form with ['LCHModuleBundle:Survey/form:question.html.twig', 'LCHModuleBundle:Survey/form:answer.html.twig'] %} 
  • 對於問題

在question.html.twig:

{#Question list rendering#} 
{% block _lchmodule_bundle_survey_type_questions_widget %}...{% endblock %} 

在QuestionType:

class QuestionType extends AbstractType 
{ 
    const NAME= "lchmodule_bundle_question_type";. 

    public function getName() 
    { 
     return self::NAME; 
    } 

    /** 
    * @return string 
    */ 
    public function getBlockPrefix() 
    { 
     return self::NAME; 
    } 
} 
  • 對於答案

在answer.html.twig:

{% block _lchmodule_bundle_answer_type_availableAnswers_widget %}...{% endblock %} 

在AnswerType:

class AnswerType extends AbstractType 
{ 
    const NAME = "lchmodule_bundle_answer_type"; 
    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return self::NAME; 
    } 

    /** 
    * @return string 
    */ 
    public function getBlockPrefix() { 
     return self::NAME; 
    } 
} 

對於問題,THeming非常適用,但不能爲答案。我如何訪問availableQuestion主題關於它是一個CollectionType中嵌入的CollectionType的事實?

感謝您的燈,

薩科

+0

您應該循環訪問'collection type'字段並在循環中包含一個單獨的樹枝文件,您可以在其中創建子表單。通過必要的參數。然後在包含的樹枝文件中,根據需要設置你的'form_theme'。 – Jeet

+0

非常感謝!這工作。你能給我一個好的答案嗎? – nbonniot

回答

1

在主表格,打印您的收藏項目,如:

{% for collectionItem in form.collections %} 
    {% include 'AppBundle:Blog:collection.item.html.twig' %} 
{% endfor %} 

,以便colleciton項目可以位於不同的樹枝文件。現在在單獨的樹枝文件(collection.item.html.twig)中,定義您的form_theme或進行必要的更改。

希望這有助於。