在 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 文档,我看到了本地执行它的方法(没有 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 中启用树枝的沙箱扩展?