我正在使用以下代码渲染原型:
{{form_widget(form.get('prototype').myField, {'attr': {'value': '<%= myModelProperty %>'} }) }}
骨干JS应该读取此树枝块生成的代码,并将 替换为某个模型属性值。
这种情况不会发生,因为该值在 twig 中被转义,因此被替换为:
<%= 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 %}
但没有成功。
所以我的问题是如何不转义树枝中的字段值。
Thanks!
EDIT
解决方案:
所以实际上方法是正确的,我必须使用“原始”过滤器来使我的变量不被转义。
我有一个自动转义块集,可以容纳这个特定的输出,这就是为什么它必须“未转义”的原因。
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 标签中打印值 so 时,转义就完成了,所以我之前所做的是将未转义的值发送到实际调用 print 的块,并在其中转义了值。
这对我有用!
谢谢!