3

私はSymfony2を学んでいます。現在、小枝テンプレートでフォームラベルをレンダリングしようとしています。ラベルにhtmlタグが含まれていますが、これは私の小枝ファイルでは正しくレンダリングされていません。

フォームフィールドが作成されるコードは次のとおりです。

$builder->add('zipcode', 'integer', array(
        'label' => '<abbr title="Zone Improvement Plan">CAP</abbr> code',
        ));

小枝ファイルで、フィールドラベルを次のようにレンダリングします。

{{ form_label(form.zipcode) }}

raw、escape、eフィルターを試しましたが、htmlページに表示される結果は常に文字列です。

 <abbr title="Zone Improvement Plan">CAP</abbr> code

対応するHTMLコードではありません!

なにか提案を?前もって感謝します!

後で私は解決策を見つけました。解決策は、パスでSymfonyによって提供されるラベルブロック内の自動エスケープを無効にすることです:symfony / src / Symfony / Bridge / Twig / Resources / views / Form / form_div_layout.html.twig

したがって、twigファイルでは、フォームの外側に次の行を配置する必要があります。{%form_theme form _self%}

{% block generic_label %}
{% spaceless %}
  {% if required %}
      {% set attr = attr|merge({'class': attr.class|default('') ~ ' required'}) %}
  {% endif %}
  <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>{% autoescape false %}{{ label|trans }}{% endautoescape %}</label>
{% endspaceless %}
{% endblock %}
4

2 に答える 2

8

ジャン・ヴァルジャン自身から:

{% autoescape false %}{{ form.zipcode.vars.label | trans }}{% endautoescape %}

また、この動作をアプリ全体に一般化するために、ラベルのフォームブロックをオーバーライドできます。

{% block generic_label %}
    {% spaceless %}
        {% if required %}
            {% set attr = attr|merge({'class': attr.class|default('') ~ ' required'}) %}
        {% endif %}
        <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>
            {% autoescape false %}{{ label|trans }}{% endautoescape %}
        </label>
    {% endspaceless %}
{% endblock %}
于 2012-04-18T13:58:01.207 に答える
7

変数をレンダリングするためだけに自動空間フィルターを無効にすることは、コードを読んだときに実際には明確ではないため、最善の方法ではありません。

だから、代わりに:

{% autoescape false %}{{ label|trans }}{% endautoescape %}

あなたが使用することができます:

{{ label|trans|raw }}

于 2012-12-27T15:12:33.717 に答える