我正在尝试一些实验性的东西,我希望能完成。
我正在写一个应用程序,其中有一个CMS系统与它建立。我希望允许用户分配他们自己的全局变量,并在他们创建的页面中使用它们。
例如,用户可以创建一个变量foo
。在分支文件中,您可以通过使用{{ foo }}
来引用它,因为它被加载到全局作用域中。
我希望能够使用这些全局变量,但是在|raw
转义元素中呈现,例如页面内容。
所以,目前加载一个HTML元素,我必须使用{{ page.content|raw }}
。不幸的是,这导致foo
变量渲染出{{ foo }}
,因为它不被识别为将其用作变量。
是否有任何方法使{{ foo }}
呈现为变量,而不是字面上?
使用template_from_string
分支函数:
我会非常小心,通过|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至于你的问题的解决办法。
也许你可以使用includes
{% include 'AcmeYourBundle:User:PageOutput.html.twig' with {'userVars': UserVars} only %}
其中UserVars是用户的变量。然后你可以输入
{% for var in UserVars %}