SF2 Twig:如何自定义CollectionType中嵌入的CoolectionType的渲染?

时间:2016-08-03 10:16:06

标签: php forms symfony twig themes

我正在设计一个带有Survey实体的应用程序。每个调查可以有多个SurveyQuestion实体(表单中的CollectionType,属性Survey->问题),每个SurveyQuestion可以有多个SurveyAnswer实体(SurveyQuestion-> availableAnswers)。

表单在SurveyType,QuestionType和AnswerType中逻辑分布。

如何为availableAnswers设置模板片段?

我环顾了两个线索:

首先,form_theme定位特定类型:在Survey表格中

 {# 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对问题很有帮助,但不是答案。如何在CollectionType中嵌入CollectionType这一事实访问可用的问题?

感谢您的灯光,

尼古拉斯

1 个答案:

答案 0 :(得分:1)

在主窗体上,将您的收藏项打印为:

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

这样colleciton项目可以在单独的twig文件中。现在,在单独的文件夹文件(collection.item.html.twig)中,定义您的form_theme或进行必要的更改。

希望这会有所帮助。