Symfony2 Formbuilder自动转义?

Nic*_*ick 5 php symfony twig

我的 一些选择选项中有一个硬空格().不知何故,在某个地方,他们正在逃脱.我试过了:

{% autoescape false %}
    {{ form_widget(foobar) }}
{% endautoescape %}    
Run Code Online (Sandbox Code Playgroud)

以及

{{ form_widget(foobar)|raw }}
Run Code Online (Sandbox Code Playgroud)

以及Twig中的以下内容 config.yml

autoescape: false
Run Code Online (Sandbox Code Playgroud)

然而,选择字段仍然被渲染为 Choice Text Here代替Choice Text Here,而在源中它们被编码为 Choice Text Here

在控制器中我有:

$form   ->add('foo', 'choice', array(
            'label' => 'Foo Label',
            'choices'  => $fooChoices,
            'required' => true));
$form = $form->getForm();
$foobar = $form->createView();
Run Code Online (Sandbox Code Playgroud)

如果print_r $fooChoices我得到:

Array ( [1] =>  60# FooBar [5] =>  60# BatBar [11] =>  60# DooWop )
Run Code Online (Sandbox Code Playgroud)

这显示了我的正确 (注意60年代前面的双重空间).在FormBuilder和渲染之间的某个地方,它会被转义.

表单生成器内部是否存在内置转义?

我所推断的是,通过$form->createView()数据呈现表单视图仍然没有转义.但是,当它通过form_widget到达Twig时,它已被转义.做form_widget(foobar)|raw这个显示.

编辑:我已经添加了一个解决方法作为答案,但我仍然有兴趣接受一个解释如何防止最初的逃避完全发生的答案.

小智 8

我遇到了无线电标签的同样问题.这解决了它.

{% for child in form %}

  {% autoescape false %}
    {{ child.vars.label }}
  {% endautoescape %}

  {{ form_widget(child) }}

{% endfor %}
Run Code Online (Sandbox Code Playgroud)