123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Bundle\TwigBundle\DependencyInjection\Compiler;
- use Symfony\Component\Config\Resource\ClassExistenceResource;
- use Symfony\Component\DependencyInjection\Alias;
- use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
- use Symfony\Component\DependencyInjection\ContainerBuilder;
- use Symfony\Component\DependencyInjection\Reference;
- use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
- use Symfony\Component\Stopwatch\Stopwatch;
- use Symfony\Component\Yaml\Parser as YamlParser;
- /**
- * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
- */
- class ExtensionPass implements CompilerPassInterface
- {
- public function process(ContainerBuilder $container)
- {
- if ($container->has('form.extension')) {
- $container->getDefinition('twig.extension.form')->addTag('twig.extension');
- $reflClass = new \ReflectionClass('Symfony\Bridge\Twig\Extension\FormExtension');
- $container->getDefinition('twig.loader.filesystem')->addMethodCall('addPath', array(dirname(dirname($reflClass->getFileName())).'/Resources/views/Form'));
- }
- if ($container->has('translator')) {
- $container->getDefinition('twig.extension.trans')->addTag('twig.extension');
- }
- if ($container->has('router')) {
- $container->getDefinition('twig.extension.routing')->addTag('twig.extension');
- }
- if ($container->has('fragment.handler')) {
- $container->getDefinition('twig.extension.httpkernel')->addTag('twig.extension');
- // inject Twig in the hinclude service if Twig is the only registered templating engine
- if (
- !$container->hasParameter('templating.engines')
- || array('twig') == $container->getParameter('templating.engines')
- ) {
- $container->getDefinition('fragment.renderer.hinclude')
- ->addTag('kernel.fragment_renderer', array('alias' => 'hinclude'))
- ->replaceArgument(0, new Reference('twig'))
- ;
- }
- }
- if ($container->has('request_stack')) {
- $container->getDefinition('twig.extension.httpfoundation')->addTag('twig.extension');
- }
- if ($container->getParameter('kernel.debug')) {
- $container->getDefinition('twig.extension.profiler')->addTag('twig.extension');
- $container->getDefinition('twig.extension.debug')->addTag('twig.extension');
- }
- $composerRootDir = $this->getComposerRootDir($container->getParameter('kernel.root_dir'));
- $loader = $container->getDefinition('twig.loader.filesystem');
- $loader->replaceArgument(2, $composerRootDir);
- if (!$container->has('templating')) {
- $loader = $container->getDefinition('twig.loader.native_filesystem');
- $loader->replaceArgument(1, $composerRootDir);
- $loader->addTag('twig.loader');
- $loader->setMethodCalls($container->getDefinition('twig.loader.filesystem')->getMethodCalls());
- $container->setAlias('twig.loader.filesystem', new Alias('twig.loader.native_filesystem', false));
- }
- if ($container->has('assets.packages')) {
- $container->getDefinition('twig.extension.assets')->addTag('twig.extension');
- }
- $container->addResource(new ClassExistenceResource(YamlParser::class));
- if (class_exists(YamlParser::class)) {
- $container->getDefinition('twig.extension.yaml')->addTag('twig.extension');
- }
- $container->addResource(new ClassExistenceResource(Stopwatch::class));
- if (class_exists(Stopwatch::class)) {
- $container->getDefinition('twig.extension.debug.stopwatch')->addTag('twig.extension');
- }
- $container->addResource(new ClassExistenceResource(ExpressionLanguage::class));
- if (class_exists(ExpressionLanguage::class)) {
- $container->getDefinition('twig.extension.expression')->addTag('twig.extension');
- }
- }
- private function getComposerRootDir($rootDir)
- {
- $dir = $rootDir;
- while (!file_exists($dir.'/composer.json')) {
- if ($dir === dirname($dir)) {
- return $rootDir;
- }
- $dir = dirname($dir);
- }
- return $dir;
- }
- }
|