gpt4 book ai didi

symfony - 如何禁用或覆盖 Twig 中的内置函数

转载 作者:行者123 更新时间:2023-12-04 03:11:48 26 4
gpt4 key购买 nike

是否可以禁用内置功能,例如

  • 属性
  • 阻止
  • 不变
  • 周期
  • 日期
  • 转储
  • 包括
  • 最大
  • 分钟
  • 家长
  • 随机
  • 范围
  • 来源
  • template_from_string

这是我的代码:

 $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())。

考虑以下代码:

main.twig

{% extends 'parent.twig' %}

{% block body %}
{{ max(1, 2, 3) }}
{{ parent() }}
{% endblock %}

parent.twig

{% block body %}
{% endblock %}

如果您查看已编译的模板,主体 block 将像这样编译:

    // 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 "

";
}

如果你想看full compiled template .

如您所见,Twig 不使用标准助手调用此函数,因此,parent() 不通过沙箱过滤系统。

如果您想要另一个证明 parent() 是一种语言结构,只需在您不在 block() 中时调用它。你会得到一个 Twig_Error_Syntax 异常,而不是 Twig_Error_Runtime 异常。 Try it yourself in this fiddle .

因此,要回答您的问题,禁用 parent() 的唯一方法是禁用 {% block %} 标记。因此,使用 parent() 会引发语法错误,就像被遗忘的 %} 一样。

关于symfony - 如何禁用或覆盖 Twig 中的内置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44606838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com