You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Prototype传递给Stimulus控制器?Symfony表单问题咨询

Symfony CollectionType + Stimulus 转义问题解决方案

问题原因

stimulus_controller() Twig助手本身已经内置了HTML属性转义逻辑,目的是规避XSS安全风险。当你手动为prototype添加|e('html_attr')过滤器时,会触发双重转义:

  • 第一次:|e('html_attr')将prototype中的HTML特殊字符(如<、>)转义为实体(&lt;、&gt;)
  • 第二次: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:54:59