【问题标题】:Symfony Twig - Allowing the use of Twig Globals in a HTML escaped elementSymfony Twig - 允许在 HTML 转义元素中使用 Twig Globals
【发布时间】:2015-10-13 19:05:35
【问题描述】:

我在这里尝试了一些相当实验性的东西,我希望可以做到。

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

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

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

因此,目前要加载 HTML 元素,我必须使用 {{ page.content|raw }}。不幸的是,这会导致 foo 变量渲染出 {{ foo }},因为无法识别将其用作变量。

有没有办法让{{ foo }} 呈现为变量而不是字面意思?

【问题讨论】:

    标签: php symfony twig


    【解决方案1】:

    使用template_from_string twig 函数:

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

    【讨论】:

    • 编辑:没关系,是的。这与能够与它一起呈现 html 是否很好?或者它是否与|raw 过滤器一样,并且能够访问 twig 变量?
    • 是的,它应该与包含函数的任何 html 一起使用
    【解决方案2】:

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

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

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

    也许你可以使用包含

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

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

    {% for var in UserVars %}
    

    在模板中包含。

    【讨论】:

    • 不幸的是,由于变量是内容本身的一部分,所以这不起作用,因为我必须以某种方式将变量从流中分离出来。
    猜你喜欢
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    相关资源
    最近更新 更多