Dans Symfony2, le module Twig est désactivé par défaut. L'un d'entre eux est l'extension debug, qui ajoute {% debug %}
(utile dans un environnement de développement).
Pour l'activer, rien de bien difficile, vous ajoutez ce service à votre configuration :
debug.twig.extension:
class: Twig_Extensions_Extension_Debug
tags:
- { name: 'twig.extension' }
Mais comment activer le {% sandbox %}
tag ?
Mon problème est que le constructeur de l'extension prend en compte les politiques de sécurité :
public function __construct(Twig_Sandbox_SecurityPolicyInterface $policy, $sandboxed = false)
{
$this->policy = $policy;
$this->sandboxedGlobally = $sandboxed;
}
En lisant le documentation twig J'ai vu le moyen de le faire nativement (sans 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);
Je peux faire quelque chose comme cela à l'intérieur d'un service juste avant d'utiliser le bac à sable, mais ce n'est pas aussi clair que l'injection de dépendance à laquelle nous sommes habitués.
Existe-t-il une meilleure façon d'activer l'extension twig's sandbox dans Symfony2 ?