的Symfony 2,嫩枝:如何不逃脱字段值(与backbonejs&的symfony 2中使用)(

2019-06-26 04:18发布

我使用下面的代码绘制的原型:

{{form_widget(form.get('prototype').myField, {'attr': {'value': '<%= myModelProperty %>'} }) }}

BackboneJS应该读出由该树枝块生成的代码,并通过一些模型属性值替换<(%)= myModelProperty%>。

而这种情况不会发生,因为该值在树枝逃脱,因而改为:

&lt;%= viewport %&gt;

我试着值强制RAW在* form_div_layout.html *文件:

> {% 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 %}

但没有成功。

所以我的问题是如何不逃避树枝字段值。

谢谢!

编辑

解决方案:所以其实方法是正确的,我必须使用“原始”过滤器让我的变量没有逃脱。 我有一个autoescape块设置englobe这个特殊的输出这就是为什么它必须是这个原因“未逃逸”。

Symfony的2的枝束提供几个块来呈现表单数据,以及那些使用特定块属性渲染称为“{%块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 } } }) }}

打印时的值,从而在{{}}树枝标签,所以我刚才所做的就是发送一个转义值块,其中印刷实际上是所谓的,因此这里被逃脱值逃生完成。

这对我的作品! 谢谢!

Answer 1:

解决方案:所以其实方法是正确的,我必须使用raw过滤器,让我的变量没有逃脱。 我有一个autoescape块设置englobe这个特殊的输出这就是为什么它必须是这个原因“未逃逸”。

Symfony的2的枝束提供几个块来呈现表单数据,以及那些使用用于属性特定块渲染称为{% 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 } } }) }}

打印时的值,以便在逃生完成{{ }}树枝标签,所以我刚才所做的就是发送一个转义值块,其中印刷实际上是所谓的,因此这里被逃脱了值。

这对我的作品! 谢谢!



Answer 2:

使用原始过滤器是这样做的正确方法。 如果你没有与成功,那么其他的东西是错误的。 尝试清除缓存或禁用树枝缓存在app /配置/ config.yml

twig:
    cache: ~

如果它不是一个缓存的问题,那么我不能确定在哪里接下来看看。



文章来源: Symfony 2, Twig: how not to escape field value (used with backbonejs & symfony 2)