Drupal8自定义模块如何将.module文件含HTML的变量传递到twig模板渲染
Drupal 7迁移至Drupal 8 HTML变量传递渲染解答
是可以实现的,不过要注意Twig默认开启了自动转义机制,你如果直接按示例写{{ var }},输出的会是纯文本的<p>hello world</p>,不会渲染成段落元素,有两种常用方案解决这个问题:
- 方案一:直接在Twig模板中使用
raw过滤器
把模板里的代码改成{{ var|raw }}即可,Twig会跳过对这个变量的转义,直接渲染其中的HTML内容。这个方案修改成本低,适合变量内容完全可控、没有用户输入等不可信内容的场景。 - 方案二:在.module文件中将变量标记为安全渲染对象
不用修改Twig代码,只需修改.module中的变量声明代码,用Drupal核心的Markup类包裹HTML内容即可:
原代码:$var = '<p>hello world</p>';
修改后:$var = \Drupal\Core\Render\Markup::create('<p>hello world</p>');
经过Markup类处理的变量会被Drupal识别为预先验证过的安全内容,传递到Twig后直接写{{ var }}就能正常渲染HTML。
注意:如果你的HTML变量中包含用户提交内容、外部抓取内容等不可信来源的文本,不要直接跳过转义,必须先做XSS过滤处理,避免出现安全漏洞。
内容的提问来源于stack exchange,提问作者Oliver Wood
相关产品推荐
相关产品推荐

