Пример #1
0
 /**
  * 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');
     $processor = new Processor();
     $configuration = new Configuration();
     $config = $processor->process($configuration->getConfigTree(), $configs);
     $container->setParameter('twig.form.resources', $config['form']['resources']);
     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']));
             }
         }
     }
     if (!empty($config['extensions'])) {
         foreach ($config['extensions'] as $id) {
             $container->getDefinition($id)->addTag('twig.extension');
         }
     }
     if (!empty($config['cache_warmer'])) {
         $container->getDefinition('templating.cache_warmer.templates_cache')->addTag('kernel.cache_warmer');
     }
     unset($config['form'], $config['globals'], $config['extensions'], $config['cache_warmer']);
     $container->setParameter('twig.options', $config);
     $this->addClassesToCompile(array('Twig_Environment', 'Twig_ExtensionInterface', 'Twig_Extension', 'Twig_Extension_Core', 'Twig_Extension_Escaper', 'Twig_Extension_Optimizer', 'Twig_LoaderInterface', 'Twig_Markup', 'Twig_TemplateInterface', 'Twig_Template'));
 }
 public function check()
 {
     // check if twig exception controller is not the default one.
     $config = new Configuration();
     $tree = $config->getConfigTreeBuilder()->buildTree();
     $reflectionTree = new \ReflectionClass($tree);
     $reflectionChildren = $reflectionTree->getProperty('children');
     $reflectionChildren->setAccessible(true);
     $values = $reflectionChildren->getValue($tree);
     // we suppose pages has been customized if the exception controller is not the default one,
     // so we don't look for template file in this case.
     if ($values['exception_controller']->getDefaultValue() == $this->exceptionController) {
         $missingTemplate = array();
         foreach ($this->errorCodes as $errorCode) {
             $template = sprintf('%s/Resources/TwigBundle/views/Exception/error%d.html.twig', $this->kernelRootDir, $errorCode);
             if (!file_exists($template)) {
                 $missingTemplate[] = $errorCode;
             }
         }
         if (count($missingTemplate) > 0) {
             return new Failure(sprintf('No custom error page found for the following codes: %s', implode(', ', $missingTemplate)));
         }
     }
     return new Success();
 }