1 | <?php |
||
40 | class TemplatingConfig extends AbstractConfig |
||
41 | { |
||
42 | /** |
||
43 | * Templating engines currently supported: |
||
44 | * - PHP |
||
45 | * - Twig |
||
46 | * - Smarty |
||
47 | * - Mustache. |
||
48 | * |
||
49 | * @param ServiceManager $serviceManager |
||
50 | * |
||
51 | * @throws \RuntimeException |
||
52 | */ |
||
53 | public function configureServiceManager(ServiceManager $serviceManager) |
||
54 | { |
||
55 | $config = $serviceManager->get('Config'); |
||
56 | $appRootDir = $config['parameters']['app.root_dir']; |
||
|
|||
57 | $appCacheDir = $config['parameters']['app.cache_dir']; |
||
58 | $appCharset = $config['parameters']['app.charset']; |
||
59 | |||
60 | // The "framework.templating" option is deprecated. Please replace it with "framework.view" |
||
61 | $config = $this->processConfiguration($config); |
||
62 | |||
63 | // these are the templating engines currently supported |
||
64 | // @todo - this needs to come from the app config. |
||
65 | $knownEngineIds = array('php', 'smarty', 'twig', 'mustache', 'plates', 'latte'); |
||
66 | |||
67 | // these are the engines selected by the user |
||
68 | $engineIds = isset($config['engines']) ? $config['engines'] : array('php'); |
||
69 | |||
70 | // filter templating engines |
||
71 | $engineIds = array_intersect($engineIds, $knownEngineIds); |
||
72 | if (empty($engineIds)) { |
||
73 | throw new \RuntimeException(sprintf('At least one templating engine should be defined in your app config (in $config[\'view.engines\']). These are the available ones: "%s". Example: "$config[\'templating.engines\'] = array(\'%s\');"', implode('", ', $knownEngineIds), implode("', ", $knownEngineIds))); |
||
74 | } |
||
75 | |||
76 | /* |
||
77 | * Templating Locator. |
||
78 | */ |
||
79 | $serviceManager->setFactory('templating.locator', function ($serviceManager) use ($appCacheDir) { |
||
80 | return new TemplateLocator( |
||
81 | $serviceManager->get('file_locator'), |
||
82 | $appCacheDir |
||
83 | ); |
||
84 | }); |
||
85 | |||
86 | /* |
||
87 | * Templating Name Parser. |
||
88 | */ |
||
89 | $serviceManager->setFactory('templating.name_parser', function ($serviceManager) { |
||
90 | return new TemplateNameParser($serviceManager->get('modulemanager')); |
||
91 | }); |
||
92 | |||
93 | /* |
||
94 | * Filesystem Loader. |
||
95 | */ |
||
96 | $serviceManager->setFactory('templating.loader.filesystem', function ($serviceManager) { |
||
97 | return new FileSystemLoader($serviceManager->get('templating.locator')); |
||
98 | }); |
||
99 | |||
100 | /* |
||
101 | * Templating assets helper. |
||
102 | */ |
||
103 | $serviceManager->setFactory('templating.helper.assets', function ($serviceManager) { |
||
104 | return new AssetsHelper($serviceManager->get('request')->getBasePath()); |
||
105 | }); |
||
106 | |||
107 | /* |
||
108 | * Templating globals. |
||
109 | */ |
||
110 | $serviceManager->setFactory('templating.globals', function ($serviceManager) { |
||
111 | return new GlobalVariables($serviceManager->get('servicemanager')); |
||
112 | }); |
||
113 | |||
114 | /* |
||
115 | * PHP Engine. |
||
116 | * |
||
117 | * TODO: Migrate to Symfony\Bundle\FrameworkBundle\Templating\PhpEngine |
||
118 | */ |
||
119 | $serviceManager->setFactory('templating.engine.php', function ($serviceManager) use ($appCharset) { |
||
120 | $engine = new PhpEngine( |
||
121 | $serviceManager->get('templating.name_parser'), |
||
122 | $serviceManager->get('templating.loader'), |
||
123 | array( |
||
124 | new SlotsHelper(), |
||
125 | $serviceManager->get('templating.helper.assets'), |
||
126 | new RouterHelper($serviceManager->get('router')), |
||
127 | new SessionHelper($serviceManager->get('session')), |
||
128 | ) |
||
129 | ); |
||
130 | |||
131 | $engine->addGlobal('app', $serviceManager->get('templating.globals')); |
||
132 | $engine->setCharset($appCharset); |
||
133 | |||
134 | return $engine; |
||
135 | }); |
||
136 | |||
137 | /* |
||
138 | * Twig Engine |
||
139 | */ |
||
140 | $serviceManager->setFactory('templating.engine.twig', function ($serviceManager) { |
||
141 | |||
142 | if (!class_exists('Twig_Environment')) { |
||
143 | throw new \Exception('PPI\Framework\TwigModule not found. Composer require: ppi/twig-module'); |
||
144 | } |
||
145 | |||
146 | $twigEnvironment = new \Twig_Environment( |
||
147 | new \PPI\Framework\View\Twig\Loader\FileSystemLoader( |
||
148 | $serviceManager->get('templating.locator'), |
||
149 | $serviceManager->get('templating.name_parser')) |
||
150 | ); |
||
151 | |||
152 | // Add some twig extension |
||
153 | $twigEnvironment->addExtension(new \PPI\Framework\View\Twig\Extension\AssetsExtension($serviceManager->get('templating.helper.assets'))); |
||
154 | $twigEnvironment->addExtension(new \PPI\Framework\View\Twig\Extension\RouterExtension($serviceManager->get('router'))); |
||
155 | |||
156 | return new \PPI\Framework\View\Twig\TwigEngine($twigEnvironment, $serviceManager->get('templating.name_parser'), |
||
157 | $serviceManager->get('templating.locator'), $serviceManager->get('templating.globals')); |
||
158 | }); |
||
159 | |||
160 | /* |
||
161 | * Smarty Engine. |
||
162 | */ |
||
163 | $serviceManager->setFactory('templating.engine.smarty', function ($serviceManager) use ($appCacheDir) { |
||
164 | |||
165 | if (!class_exists('NoiseLabs\Bundle\SmartyBundle\SmartyEngine')) { |
||
166 | throw new \Exception('PPI\Framework\SmartyModule not found. Composer require: ppi/smarty-module'); |
||
167 | } |
||
168 | |||
169 | $cacheDir = $appCacheDir . DIRECTORY_SEPARATOR . 'smarty'; |
||
170 | |||
171 | $smartyEngine = new \PPI\Framework\View\Smarty\SmartyEngine( |
||
172 | new \Smarty(), |
||
173 | $serviceManager->get('templating.locator'), |
||
174 | $serviceManager->get('templating.name_parser'), |
||
175 | $serviceManager->get('templating.loader'), |
||
176 | array( |
||
177 | 'cache_dir' => $cacheDir . DIRECTORY_SEPARATOR . 'cache', |
||
178 | 'compile_dir' => $cacheDir . DIRECTORY_SEPARATOR . 'templates_c', |
||
179 | ), |
||
180 | $serviceManager->get('templating.globals'), |
||
181 | $serviceManager->get('logger') |
||
182 | ); |
||
183 | |||
184 | // Add some SmartyBundle extensions |
||
185 | $smartyEngine->addExtension(new SmartyAssetsExtension($serviceManager->get('templating.helper.assets'))); |
||
186 | $smartyEngine->addExtension(new SmartyRouterExtension($serviceManager->get('router'))); |
||
187 | |||
188 | return $smartyEngine; |
||
189 | }); |
||
190 | |||
191 | // Mustache Engine |
||
192 | $serviceManager->setFactory('templating.engine.mustache', function ($serviceManager, $appCacheDir) { |
||
193 | |||
194 | if (!class_exists('Mustache_Engine')) { |
||
195 | throw new \Exception('PPI\Framework\MustacheModule not found. Composer require: ppi/mustache-module'); |
||
196 | } |
||
197 | |||
198 | $rawMustacheEngine = new \Mustache_Engine(array( |
||
199 | 'loader' => new MustacheFileSystemLoader($serviceManager->get('templating.locator'), |
||
200 | $serviceManager->get('templating.name_parser')), |
||
201 | 'cache' => $appCacheDir . DIRECTORY_SEPARATOR . 'mustache', |
||
202 | )); |
||
203 | |||
204 | return new MustacheEngine($rawMustacheEngine, $serviceManager->get('templating.name_parser')); |
||
205 | }); |
||
206 | |||
207 | /* |
||
208 | * Delegating Engine. |
||
209 | */ |
||
210 | $serviceManager->setFactory('templating.engine.delegating', function ($serviceManager) use ($engineIds) { |
||
211 | $delegatingEngine = new DelegatingEngine(); |
||
212 | // @todo - lazy load this |
||
213 | foreach ($engineIds as $id) { |
||
214 | $delegatingEngine->addEngine($serviceManager->get('templating.engine.' . $id)); |
||
215 | } |
||
216 | |||
217 | return $delegatingEngine; |
||
218 | }); |
||
219 | |||
220 | $serviceManager->setAlias('templating', 'templating.engine.delegating'); |
||
221 | } |
||
222 | |||
223 | /** |
||
224 | * {@inheritDoc} |
||
225 | */ |
||
226 | public function getConfigurationDefaults() |
||
234 | |||
235 | /** |
||
236 | * {@inheritDoc} |
||
237 | */ |
||
238 | protected function processConfiguration(array $config, ServiceManager $serviceManager = null) |
||
251 | } |
||
252 |
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVar
assignment in line 1 and the$higher
assignment in line 2 are dead. The first because$myVar
is never used and the second because$higher
is always overwritten for every possible time line.