В 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?