Source of file TwigExtension.php
Size: 5,790 Bytes - Last Modified: 2013-07-17T08:22:21+02:00
/home/theseer/Downloads/Symfony/vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 | <?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; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; use Symfony\Component\HttpKernel\DependencyInjection\Extension; /** * TwigExtension. * * @author Fabien Potencier <fabien@symfony.com> * @author Jeremy Mikola <jmikola@gmail.com> */ class TwigExtension extends Extension { /** * Responds to the twig configuration parameter. * * @param array $configs * @param ContainerBuilder $container */ public function load(array $configs, ContainerBuilder $container) { $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('twig.xml'); foreach ($configs as &$config) { if (isset($config['globals'])) { foreach ($config['globals'] as $name => $value) { if (is_array($value) && isset($value['key'])) { $config['globals'][$name] = array( 'key' => $name, 'value' => $config['globals'][$name] ); } } } } $configuration = $this->getConfiguration($configs, $container); $config = $this->processConfiguration($configuration, $configs); $container->setParameter('twig.exception_listener.controller', $config['exception_controller']); $container->setParameter('twig.form.resources', $config['form']['resources']); $twigFilesystemLoaderDefinition = $container->getDefinition('twig.loader.filesystem'); // register user-configured paths foreach ($config['paths'] as $path => $namespace) { if (!$namespace) { $twigFilesystemLoaderDefinition->addMethodCall('addPath', array($path)); } else { $twigFilesystemLoaderDefinition->addMethodCall('addPath', array($path, $namespace)); } } // register bundles as Twig namespaces foreach ($container->getParameter('kernel.bundles') as $bundle => $class) { if (is_dir($dir = $container->getParameter('kernel.root_dir').'/Resources/'.$bundle.'/views')) { $this->addTwigPath($twigFilesystemLoaderDefinition, $dir, $bundle); } $reflection = new \ReflectionClass($class); if (is_dir($dir = dirname($reflection->getFilename()).'/Resources/views')) { $this->addTwigPath($twigFilesystemLoaderDefinition, $dir, $bundle); } } if (is_dir($dir = $container->getParameter('kernel.root_dir').'/Resources/views')) { $twigFilesystemLoaderDefinition->addMethodCall('addPath', array($dir)); } if (!empty($config['globals'])) { $def = $container->getDefinition('twig'); foreach ($config['globals'] as $key => $global) { if (isset($global['type']) && 'service' === $global['type']) { $def->addMethodCall('addGlobal', array($key, new Reference($global['id']))); } else { $def->addMethodCall('addGlobal', array($key, $global['value'])); } } } unset( $config['form'], $config['globals'], $config['extensions'] ); if ($container->getParameter('kernel.debug')) { $loader->load('debug.xml'); $container->setDefinition('templating.engine.twig', $container->findDefinition('debug.templating.engine.twig')); $container->setAlias('debug.templating.engine.twig', 'templating.engine.twig'); } if (isset($config['autoescape_service']) && isset($config['autoescape_service_method'])) { $container->findDefinition('templating.engine.twig')->addMethodCall('setDefaultEscapingStrategy', array(array(new Reference($config['autoescape_service']), $config['autoescape_service_method']))); unset($config['autoescape_service'], $config['autoescape_service_method']); } elseif (!isset($config['autoescape'])) { $container->findDefinition('templating.engine.twig')->addMethodCall('setDefaultEscapingStrategy', array(array(new Reference('templating.engine.twig'), 'guessDefaultEscapingStrategy'))); } $container->setParameter('twig.options', $config); $this->addClassesToCompile(array( 'Twig_Environment', 'Twig_Extension', 'Twig_Extension_Core', 'Twig_Extension_Escaper', 'Twig_Extension_Optimizer', 'Twig_LoaderInterface', 'Twig_Markup', 'Twig_Template', )); } private function addTwigPath($twigFilesystemLoaderDefinition, $dir, $bundle) { $name = $bundle; if ('Bundle' === substr($name, -6)) { $name = substr($name, 0, -6); } $twigFilesystemLoaderDefinition->addMethodCall('addPath', array($dir, $name)); } /** * Returns the base path for the XSD files. * * @return string The XSD base path */ public function getXsdValidationBasePath() { return __DIR__.'/../Resources/config/schema'; } public function getNamespace() { return 'http://symfony.com/schema/dic/twig'; } } |