Symfony Twig - 允许在 HTML 转义元素中使用 Twig 全局变量

Symfony Twig - Allowing the use of Twig Globals in a HTML escaped element

我正在尝试一些比较实验性的东西,我希望可以完成。

我正在编写一个应用程序,它内置了一个 CMS 系统。我希望允许用户分配他们自己的 twig 全局变量并在他们创建的页面中使用它们。

例如,用户可以创建一个名为 foo 的变量。在树枝文件中,您可以使用 {{ foo }} 来引用它,因为它已加载到全局范围中。

我希望能够使用这些全局变量,但是在 |raw 转义元素(例如页面内容)中呈现。

因此,目前要加载 HTML 元素,我必须使用 {{ page.content|raw }}。不幸的是,这导致 foo 变量呈现出 {{ foo }},因为它没有被识别为将其用作变量。

有什么方法可以让 {{ foo }} 呈现为变量而不是字面意思?

使用 template_from_string 树枝函数:

http://twig.sensiolabs.org/doc/functions/template_from_string.html

我会非常小心,运行 任何通过 |raw 过滤器的用户输入都可能导致 XSS 攻击。 您也可能想阅读有关模板注入攻击的文章。如果您允许您的用户编写 Twig 内容,您可能会面临风险。

https://www.blackhat.com/docs/us-15/materials/us-15-Kettle-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-wp.pdf

至于你的问题的解决方法。

也许你可以使用 include

{% include 'AcmeYourBundle:User:PageOutput.html.twig' with {'userVars': UserVars} only %}

其中 UserVars 是您的用户的变量。然后你可以做一个

{% for var in UserVars %}

在模板中包含。