以下のコードを使用してプロトタイプをレンダリングしています。
{{form_widget(form.get('prototype').myField, {'attr': {'value': '<%= myModelProperty %>'} }) }}
BackboneJSは、このtwigブロックによって生成されたコードを読み取り、<%= myModelProperty%>をモデルプロパティ値に置き換えることになっています。
そして、値が小枝でエスケープされ、次のように置き換えられるため、これは発生しません。
<%= viewport %>
*form_div_layout.html*ファイルで値を強制的にRAWにしようとしました。
> {% block field_widget %} {% spaceless %}
> {% set type = type|default('text') %}
> <input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value|raw }}" {% endif %}/> {%
> endspaceless %} {% endblock field_widget %}
しかし、成功しませんでした。
だから私の質問は、小枝のフィールド値をエスケープしない方法です。
ありがとう!
編集
解決策:実際、この方法は正しかったので、変数をエスケープしないようにするには、「raw」フィルターを使用する必要があります。私はこの特定の出力をエングローブする自動エスケープブロックセットを持っています。それが「エスケープされていない」必要がある理由です。
Symfony 2のTwigバンドルは、フォームデータをレンダリングするためのいくつかのブロックを提供し、それらは「{%block widget_attributes%}」と呼ばれる属性レンダリングのための特定のブロックを使用します。
私が行ったことは、このブロックを編集して(カスタマイズしたすべてのブロックを含む個別のテンプレートファイルを作成しました)、「この値をエスケープするかどうか」のレイヤーを追加できるようにすることです。
{% block widget_attributes %}
{% spaceless %}
id="{{ id }}" name="{{ full_name }}"{% if read_only %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
{% for attrname,attrvalue in attr %}
{# Attribute value can be defined as an array. ['data']: contains the actual value, ['escape']: boolean (true if the value HAS to be escaped)#}
{% if attrvalue.data is defined %}
{% if not attrvalue.escape %}
{{attrname}}="{{ attrvalue.data|raw }}"
{% else %}
{{attrname}}="{{ attrvalue.data|e }}"
{% endif %}
{% else %}
{{attrname}}="{{attrvalue}}"
{% endif %}
{% endfor %}
{% endspaceless %}
{% endblock widget_attributes %}
私の小枝ファイルから呼び出されました:
{{ form_widget(form.displays.get('prototype').myField, {'attr': {'value': { 'data': myvalue, 'escape': false } } }) }}
{{}} twigタグで値を出力するときにエスケープが行われるため、以前に行っていたのは、出力が実際に呼び出され、値がエスケープされたブロックにエスケープされていない値を送信することでした。
これは私のために働きます!ありがとう!