2012-07-10 51 views
3

我使用以下代码呈现一个原型(具有backbonejs&的symfony 2中所用):的Symfony 2,嫩枝:如何不逃脱字段值

{{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的小枝包提供了几个块来呈现表单数据,而那些使用特定块的属性呈现称为“{%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 } } }) }} 

打印值时,因此在{{}}树枝标签,所以我在前面所做的是发送转义值块,其中印刷实际上是被称为逃逸完成以及价值如何逃逸的地方。

这适用于我! 谢谢!

+0

你为什么不尝试在javascript中忽略这个值?如果可能在JS中,它会更容易。 – AdrienBrault 2012-07-10 19:20:49

+0

这可能是一种做法,但最简单的方法是先不要让它逃脱。 – LEM01 2012-07-11 08:11:54

+0

我找到了解决方案!在我的原始帖子的编辑中描述。感谢大家的帮助! – LEM01 2012-07-11 08:48:19

回答

3

解决方法:所以实际上这个方法是正确的,我必须使用raw过滤器来让我的变量不会被转义。我有一个autoescape块设置,这是特别的输出,这就是为什么它必须是“un-escaped”。

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 } } }) }} 

打印值时,所以在{{ }}树枝标签,所以我在前面所做的是发送转义值块,其中印刷实际上是所谓何逃生完成的价值因此而逃脱。

这适用于我!谢谢!

1

使用raw过滤器是正确的方法。如果你没有成功,那么别的东西就是错的。尝试清除缓存或禁用树枝缓存在app /配置/ config.yml

twig: 
    cache: ~ 

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