1: <?php
2: 3: 4: 5: 6: 7: 8: 9:
10:
11: namespace Autarky\TwigTemplating;
12:
13: use Autarky\Container\ContainerInterface;
14: use Autarky\Provider;
15: use Twig_Loader_Filesystem;
16:
17: 18: 19:
20: class TwigTemplatingProvider extends Provider
21: {
22: 23: 24:
25: public function register()
26: {
27: $dic = $this->app->getContainer();
28:
29: $dic->share('Autarky\TwigTemplating\TemplatingEngine');
30:
31: $dic->define('Twig_LoaderInterface', [$this, 'makeTwigLoader']);
32:
33: $dic->define('Autarky\TwigTemplating\TwigEnvironment', [$this, 'makeTwigEnvironment']);
34: $dic->share('Autarky\TwigTemplating\TwigEnvironment');
35: $dic->alias('Autarky\TwigTemplating\TwigEnvironment', 'Twig_Environment');
36: }
37:
38: 39: 40: 41: 42:
43: public function makeTwigLoader()
44: {
45: return new Twig_Loader_Filesystem(
46: $this->app->getConfig()->get('path.templates')
47: );
48: }
49:
50: 51: 52: 53: 54:
55: public function makeTwigEnvironment(ContainerInterface $dic)
56: {
57: $config = $this->app->getConfig();
58: $options = ['debug' => $config->get('app.debug')];
59:
60: if ($config->has('path.templates_cache')) {
61: $options['cache'] = $config->get('path.templates_cache');
62: } else if ($config->has('path.storage')) {
63: $options['cache'] = $config->get('path.storage').'/twig';
64: }
65:
66: $env = new TwigEnvironment($dic->resolve('Twig_LoaderInterface'), $options);
67:
68:
69: $extensions = array_merge([
70: 'Autarky\TwigTemplating\Extensions\PartialExtension',
71: 'Autarky\TwigTemplating\Extensions\UrlGenerationExtension' =>
72: ['Autarky\Routing\UrlGenerator'],
73: 'Autarky\TwigTemplating\Extensions\SessionExtension' =>
74: ['Symfony\Component\HttpFoundation\Session\Session'],
75: ], $this->app->getConfig()->get('twig.extensions', []));
76:
77:
78:
79:
80:
81:
82:
83: foreach ($extensions as $extension => $dependencies) {
84: if (is_int($extension)) {
85: $env->addExtension($dic->resolve($dependencies));
86: } else {
87: foreach ((array) $dependencies as $dependency) {
88: if (!$dic->isBound($dependency)) {
89:
90:
91:
92: continue 2;
93: }
94: }
95:
96:
97:
98: $env->addExtension($dic->resolve($extension));
99: }
100: }
101:
102: return $env;
103: }
104: }
105: