2

我正在嵌入式控制器操作中生成表单。现在我面临以下问题。在这种情况下,表单主题不起作用。

所以我有什么:

  1. 模板“page.html.twig”

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

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

{% form_theme form _self %}

在 page.html.twig 中,我收到一个错误,表单变量不存在。并且它是正确的,形式 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

所以试图有人做这样的事情?

4

1 回答 1

3

亲自回答我的问题。

这是 Symfony2 文档http://symfony.com/doc/current/book/forms.html中的一个小句子

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

所以有两种解决方案来解决这个问题:

  1. 将表单主题代码移动到单独的文件中,并将其包含在嵌入式模板中

    {% form_theme form with 'fields.html.twig' %}
    
  2. 将表单主题代码留在将生成表单的同一模板中,但从一些“ form.html.twig”空模板扩展模板。

我只完成了第二种方式,它的工作原理,但我相信第一种方式也可以。

于 2013-01-22T11:44:00.930 回答