private function registerTwig(\Pimple $container)
{
$container['twig.loader'] = $container->share(function ($container) {
$loader = new Twig_Loader_Filesystem(array());
foreach ($container['themes'] as $theme) {
if (is_dir($path = $theme . '/layouts')) {
$loader->addPath($path);
}
}
$loader->addPath(__DIR__ . '/Twig/Resources/layouts');
$loader->addPath(__DIR__ . '/Twig/Resources/layouts', 'default_theme');
if (isset($container['config']['engine']['theme_base_dir'])) {
if (!is_string($container['config']['engine']['theme_base_dir'])) {
throw new \InvalidArgumentException('The config.engine.theme_base_dir is not a string');
}
$loader->addPath(str_replace('%dir%', $container['base_dir'], $container['config']['engine']['theme_base_dir']));
} else {
$loader->addPath($container['base_dir']);
}
return $loader;
});
$container['twig'] = $container->share(function ($container) {
$twig = new Twig_Environment($container['twig.loader'], array('strict_variables' => true, 'debug' => true, 'base_template_class' => 'Carew\\Twig\\Template'));
// We will not be able to add new global in Twig 2.0, so we should declare everything now;
$twig->addGlobal('carew', new Globals($container['config']));
$twig->addExtension(new \Twig_Extension_Debug());
$twig->addExtension(new \Twig_Extension_StringLoader());
// We have to inject the container to avoid a cyclic dependency;
$twig->addExtension(new CarewExtension($container));
return $twig;
});
}