2

埋め込みコントローラー アクションでフォームを生成しています。そして今、私は次の問題に直面しました。その場合、フォームのテーマは機能しません。

だから私が持っているもの:

  1. テンプレート「page.html.twig」

    {% block content %}
    {% render 'MyBundle:Widget:index' %}
    {% endblock %}
    
  2. indexAction() はフォームを作成し、通常は form_row、form_rest などを使用してフォームをレンダリングする別のテンプレート「form.html.twig」をレンダリングします。

だから、今私はフォームのテーマをカスタマイズしようとしています.ここに私の問題があります. コードを入れると

{% 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を別のテンプレートにポイントする必要があります。

したがって、この問題を解決するには2つの解決策があります。

  1. フォームのテーマコードを別のファイルに移動し、を使用して埋め込みテンプレートに含めます

    {% form_theme form with 'fields.html.twig' %}
    
  2. フォームが生成される同じテンプレートにフォームテーマコードを残しますが、form.html.twig空のテンプレートからテンプレートを拡張します。

私は2番目の方法とその機能を実行しただけですが、最初の方法も機能すると確信しています。

于 2013-01-22T11:44:00.930 に答える