如何将Prototype传递给Stimulus控制器?Symfony表单问题咨询
Symfony CollectionType + Stimulus 转义问题解决方案
问题原因
stimulus_controller() Twig助手本身已经内置了HTML属性转义逻辑,目的是规避XSS安全风险。当你手动为prototype添加|e('html_attr')过滤器时,会触发双重转义:
- 第一次:
|e('html_attr')将prototype中的HTML特殊字符(如<、>)转义为实体(<、>) - 第二次:
stimulus_controller()再次对已经转义过的字符串进行转义,最终页面上的参数值是经过两次转义的纯文本而非可解析的HTML
这就导致你在Stimulus控制器中用innerHTML插入时,浏览器只会把它当作文本渲染,不会解析成HTML元素。
解决方案
直接移除手动添加的|e('html_attr')过滤器,仅通过stimulus_controller()传递prototype参数:
{# 正确写法 #} <div {{ stimulus_controller('collection', { prototype: form.myCollection.vars.prototype|raw }) }}> {# 表单内容 #} </div>
关于文档的说明
官方文档的示例是正确的,并非未同步更新。文档中没有添加额外转义过滤器,正是因为stimulus_controller()助手已经自动完成了安全转义,无需手动重复操作。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

