Symfony2由嵌入式控制器动作生成的主题表单

时间:2013-01-18 17:02:04

标签: forms symfony twig theming

我在嵌入式控制器操作中生成表单。现在我遇到了以下问题。表格主题在这种情况下不起作用。

所以我拥有:

  1. tempalte" page.html.twig"

    {% block content %}
    {% render 'MyBundle:Widget:index' %}
    {% endblock %}
    
  2. indexAction()创建表单并呈现另一个模板" form.html.twig"通常使用form_row,form_rest等呈现表单。

  3. 所以,现在我正在尝试自定义表单主题,这是我的问题。 当我把代码

    {% form_theme form _self %}
    
    page.html.twig中的

    ,我得到一个错误,表单变量不存在。正确的是,form var稍后在嵌入式控制器中创建。 但是当我将主题代码放在嵌入式模板" form.html.twig"时,我又得到了另一个错误"变量"复合"不存在"

    {% block form_label %}
    {% spaceless %}
        {% if not compound %}
            {% set label_attr = label_attr|merge({'for': id}) %}
        {% endif %}
        {% if required %}
            {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %}
        {% endif %}
        {% if label is empty %}
            {% set label = name|humanize %}
        {% endif %}
        <label{% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %} {% if attr.tooltip is defined %}title="{{ attr.tooltip }}"{% endif %}>{{ label|trans({}, translation_domain) }}{% if required %}<span>*</span>{% endif %}</label>
    {% endspaceless %}
    {% endblock form_label %}
    

    此部分代码是从此文件https://github.com/symfony/symfony/blob/2.1/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig

    复制而来的

    所以试过别人做这样的事情?

1 个答案:

答案 0 :(得分:3)

自己回答我的问题。

这是Symfony2 docs http://symfony.com/doc/current/book/forms.html

中的一个小句子
  

此{%form_theme表单_self%}功能仅在您的模板扩展另一个时才有效。如果您的模板没有,则必须将form_theme指向单独的模板。

因此有两种解决方案可以解决这个问题:

  1. 将表单主题代码移动到单独的文件中,并使用

    将其包含在嵌入式模板中
    {% form_theme form with 'fields.html.twig' %}
    
  2. 将表单主题代码保留在生成表单的同一模板中,但是从某个“form.html.twig”空模板扩展模板。

  3. 我只完成了第二种方式及其工作,但我确信第一种方式也能正常工作。