php – 如何在Symfony2中正确启用twig的沙箱扩展?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何在Symfony2中正确启用twig的沙箱扩展?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1828字,纯文字阅读大概需要3分钟。
内容图文
![php – 如何在Symfony2中正确启用twig的沙箱扩展?](/upload/InfoBanner/zyjiaocheng/697/dd3f076c69b24b71836cac4eda179070.jpg)
在Symfony2中,默认情况下禁用了一些Twig模块.其中一个是调试扩展,它添加了{%debug%}标记(在开发环境中很有用).
要启用它,没有什么困难,您可以将此服务添加到您的配置中:
debug.twig.extension:
class: Twig_Extensions_Extension_Debug
tags:
- { name: 'twig.extension' }
但是如何启用{%sandbox%}标记?
我的问题是扩展的构造函数采用安全策略:
public function __construct(Twig_Sandbox_SecurityPolicyInterface $policy, $sandboxed = false)
{
$this->policy = $policy;
$this->sandboxedGlobally = $sandboxed;
}
通过阅读twig documentation,我看到了本地化的方式(没有Symfony2):
$tags = array('if');
$filters = array('upper');
$methods = array(
'Article' => array('getTitle', 'getBody'),
);
$properties = array(
'Article' => array('title', 'body'),
);
$functions = array('range');
$policy = new Twig_Sandbox_SecurityPolicy($tags, $filters, $methods, $properties, $functions);
$sandbox = new Twig_Extension_Sandbox($policy);
$twig->addExtension($sandbox);
在使用沙盒之前,我可以在服务中做类似的事情,但这并不像我们习惯的依赖注入那么清晰.
是否有更好/正确的方法在Symfony2中启用twig的沙箱扩展?
解决方法:
为什么不创建安全策略的私有服务:
parameters:
twig.sandbox.tags:
- if
twig.sandbox.filters:
- upper
twig.sandbox.methods:
Article: [getTitle, getBody]
twig.sandbox.properties:
Article: [title, body]
twig.sandbox.functions:
- range
twig.sandbox.policy:
class: Twig_Sandbox_SecurityPolicy
arguments:
- %twig.sandbox.tags%
- %twig.sandbox.filters%
- %twig.sandbox.methods%
- %twig.sandbox.properties%
- %twig.sandbox.functions%
public: false
然后,您可以将此服务注入twig.sandbox.extension服务:
twig.sandbox.extension:
class: Twig_Extension_Sandbox
arguments:
- @twig.sandbox.policy
tags:
- { name: twig.extension }
完成.标记twig.sandbox.policy私有确保无法使用容器访问它(它仍然可以注入其他服务,但我认为这不是问题).
免责声明:我没有测试过这个,它可能需要一些调整才能实际工作,所以不要复制粘贴!
内容总结
以上是互联网集市为您收集整理的php – 如何在Symfony2中正确启用twig的沙箱扩展?全部内容,希望文章能够帮你解决php – 如何在Symfony2中正确启用twig的沙箱扩展?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。