我一直试图弄清楚如何阻止Twig逃脱以下代码,我觉得这对于简洁的三元运算符来说更好一点。
希望有人可以确认我使用了正确的语法,如果在我的_layout.twig
文件中有任何性能点击,请执行此操作:
<body{{ bodyClass is defined ? (' class="' ~ bodyClass ~ '"')|raw : '' }}>
并包含在我的_template.twig
文件中:
{% extends "_layout" %}
{% set bodyClass = 'Home' %}
似乎工作,是我到目前为止获得适当输出的唯一方法!
答案 0 :(得分:2)
我对语法和性能看起来不错。
此代码在Twig 1.23.1中编译为:
echo "<body";
echo ((array_key_exists("bodyClass", $context)) ?
(((" class=\"" . (isset($context["bodyClass"]) ?
$context["bodyClass"] : null)) . "\"")) : (""));
echo ">";
如您所见,
但这是一场安全噩梦,如果bodyClass
包含任意代码,则可以向dom for example, this注入任何内容。
顺便说一句,我借此机会提醒class="{{ bodyClass }}"
使用默认转义策略不够安全,使用{{ bodyClass | e('html_attr') }}
更安全。