Symfony 如何禁用或覆盖twig中的内置函数
是否可以禁用内置功能,例如Symfony 如何禁用或覆盖twig中的内置函数,symfony,twig,Symfony,Twig,是否可以禁用内置功能,例如 属性 挡块 不变的 循环 日期 倾倒 包括 马克斯 闵 母公司 随机的 射程 来源 模板\u来自\u字符串 这是我的密码: $tags = ['if', 'for', 'set']; $filters = ['upper', 'escape', 'raw', 'join', 'length', 'escape']; $functions = ['range']; $policy = new \Twig_Sandbox_SecurityPolicy($ta
- 属性
- 挡块
- 不变的
- 循环
- 日期
- 倾倒
- 包括
- 马克斯
- 闵
- 母公司
- 随机的
- 射程
- 来源
- 模板\u来自\u字符串
$tags = ['if', 'for', 'set'];
$filters = ['upper', 'escape', 'raw', 'join', 'length', 'escape'];
$functions = ['range'];
$policy = new \Twig_Sandbox_SecurityPolicy($tags, $filters, [], [], $functions);
我想知道为什么在策略只允许范围的情况下仍然可以使用parent()parent()
不是一个函数,这是一个语言构造(就像php中的isset()
)
考虑以下代码:
主枝
母枝
如果查看已编译的模板,主体块将按如下方式编译:
// line 3
public function block_body($context, array $blocks = array())
{
// line 4
echo "
";
// line 5
echo twig_escape_filter($this->env, max(1, 2, 3), "html", null, true);
echo "
";
// line 7
$this->displayParentBlock("body", $context, $blocks);
echo "
";
}
如果你想看电影的话
正如您所见,Twig不会使用标准帮助程序调用此函数,因此,parent()
不会通过沙箱过滤系统
如果您想要另一个证明parent()
是一个语言构造的证据,只需在不在block()中时调用它即可。您将得到一个Twig\u Error\u语法
异常,而不是Twig\u Error\u运行时
异常
因此,要回答您的问题,禁用parent()
的唯一方法是禁用{%block%}
标记。因此,使用parent()
将抛出语法错误,就像忘记的%}
一样
{% block body %}
{% endblock %}
// line 3
public function block_body($context, array $blocks = array())
{
// line 4
echo "
";
// line 5
echo twig_escape_filter($this->env, max(1, 2, 3), "html", null, true);
echo "
";
// line 7
$this->displayParentBlock("body", $context, $blocks);
echo "
";
}