能否在向Twig模板传递参数时定义无需转义的变量?
在Twig中传递无需自动转义的变量
当然可以在向模板传递参数时直接定义无需转义的变量,Twig官方提供了专门的解决方案,不用在模板里写raw或unescape过滤器。
你示例里的RawTwigParam是虚构的类,实际应该用Twig自带的Twig\Markup类,具体用法如下:
- 首先引入
Twig\Markup类 - 将需要跳过转义的HTML内容,连同字符编码(一般用UTF-8)一起传入
Markup的构造函数 - 把这个
Markup实例作为变量传递给模板,模板中直接输出该变量即可,Twig会自动跳过转义
代码示例
use Twig\Markup; // 定义无需转义的HTML变量 $vars['rawvar'] = new Markup('<table><tr><td>HTML table</td></tr></table>', 'UTF-8'); // 普通变量依然会被自动转义 $vars['normalvar'] = 'This & That'; $twig = new Environment($loader, ['debug' => true]); return $twig->createTemplate($template)->render($vars);
模板中使用
在模板里直接输出变量就行:
{{ rawvar }} {# 会渲染成正常的HTML表格,不会被转义 #} {{ normalvar }} {# 会被自动转义,显示为 "This & That" #}
原理是Twig\Markup实现了Twig\MarkupInterface,Twig内部会识别这个类型的变量,跳过默认的自动转义逻辑,完全符合你想要在后端定义变量时就确定是否转义的需求。
内容的提问来源于stack exchange,提问作者JohnSmith
相关产品推荐
相关产品推荐

