/** * 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(); }