diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/WebExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/WebExtension.php index 0868c8cb919d..5a6237f98f0f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/WebExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/WebExtension.php @@ -163,6 +163,21 @@ public function configLoad($config, ContainerBuilder $container) $container->getDefinition('validator')->clearTags(); } } + + $container->setParameter('kernel.compiled_classes', array_merge($container->getParameter('kernel.compiled_classes'), array( + 'Symfony\\Components\\EventDispatcher\\Event', + 'Symfony\\Components\\HttpKernel\\ResponseListener', + 'Symfony\\Bundle\\FrameworkBundle\\Controller', + + // routing + 'Symfony\\Components\\Routing\\RouterInterface', + 'Symfony\\Components\\Routing\\Router', + 'Symfony\\Components\\Routing\\Matcher\\UrlMatcherInterface', + 'Symfony\\Components\\Routing\\Matcher\\UrlMatcher', + 'Symfony\\Components\\Routing\\Generator\\UrlGeneratorInterface', + 'Symfony\\Components\\Routing\\Generator\\UrlGenerator', + 'Symfony\\Bundle\\FrameworkBundle\\RequestListener', + ))); } /** @@ -226,6 +241,20 @@ public function templatingLoad($config, ContainerBuilder $container) $container->setDefinition('templating.loader', $container->getDefinition('templating.loader.cache')); $container->setParameter('templating.loader.cache.path', $config['cache']); } + + // compilation + $container->setParameter('kernel.compiled_classes', array_merge($container->getParameter('kernel.compiled_classes'), array( + 'Symfony\\Components\\Templating\\Loader\\LoaderInterface', + 'Symfony\\Components\\Templating\\Loader\\Loader', + 'Symfony\\Components\\Templating\\Loader\\FilesystemLoader', + 'Symfony\\Components\\Templating\\Engine', + 'Symfony\\Components\\Templating\\Renderer\\RendererInterface', + 'Symfony\\Components\\Templating\\Renderer\\Renderer', + 'Symfony\\Components\\Templating\\Renderer\\PhpRenderer', + 'Symfony\\Components\\Templating\\Storage\\Storage', + 'Symfony\\Components\\Templating\\Storage\\FileStorage', + 'Symfony\\Bundle\\FrameworkBundle\\Templating\\Engine', + ))); } /** diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config.php b/src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config.php index e3d8e35b41e5..c0405fb0c0a7 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config.php @@ -1,7 +1,5 @@ setParameter('kernel.include_core_classes', false); - $container->loadFromExtension('kernel', 'config', array( 'charset' => 'UTF-8', 'error_handler' => null, diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/config/config.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/config/config.xml index c5ba222f0079..14f976ff8a40 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/config/config.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/xml/config/config.xml @@ -11,10 +11,6 @@ http://www.symfony-project.org/schema/dic/doctrine http://www.symfony-project.org/schema/dic/doctrine/doctrine-1.0.xsd http://www.symfony-project.org/schema/dic/swiftmailer http://www.symfony-project.org/schema/dic/swiftmailer/swiftmailer-1.0.xsd"> - - false - - getWebExtension(); + $container = $this->getContainer(); + $loader = new WebExtension(); $loader->configLoad(array(), $container); $this->assertEquals('Symfony\\Bundle\\FrameworkBundle\\RequestListener', $container->getParameter('request_listener.class'), '->webLoad() loads the web.xml file if not already loaded'); $container = $this->getContainer(); - $loader = $this->getWebExtension(); + $loader = new WebExtension(); $loader->configLoad(array('profiler' => true), $container); $this->assertEquals('Symfony\\Bundle\\FrameworkBundle\\Profiler', $container->getParameter('profiler.class'), '->configLoad() loads the collectors.xml file if not already loaded'); @@ -40,7 +40,7 @@ public function testConfigLoad() public function testTemplatingLoad() { $container = $this->getContainer(); - $loader = $this->getWebExtension(); + $loader = new WebExtension(); $loader->templatingLoad(array(), $container); $this->assertEquals('Symfony\\Bundle\\FrameworkBundle\\Templating\\Engine', $container->getParameter('templating.engine.class'), '->templatingLoad() loads the templating.xml file if not already loaded'); @@ -49,7 +49,7 @@ public function testTemplatingLoad() public function testValidationLoad() { $container = $this->getContainer(); - $loader = $this->getWebExtension(); + $loader = new WebExtension(); $loader->configLoad(array('validation' => array('enabled' => true)), $container); $this->assertEquals('Symfony\Components\Validator\Validator', $container->getParameter('validator.class'), '->validationLoad() loads the validation.xml file if not already loaded'); @@ -59,20 +59,17 @@ public function testValidationLoad() $this->assertTrue($container->hasDefinition('validator.mapping.loader.annotation_loader'), '->validationLoad() loads the annotations service'); } - public function getWebExtension() { - return new WebExtension(array( - 'Symfony\\Framework' => __DIR__ . '/../../../Framework', - ), array( - 'FrameworkBundle', - )); - } - protected function getContainer() { return new ContainerBuilder(new ParameterBag(array( - 'kernel.bundle_dirs' => array(), - 'kernel.bundles' => array(), - 'kernel.debug' => false, + 'kernel.bundle_dirs' => array( + 'Symfony\\Framework' => __DIR__ . '/../../../Framework', + ), + 'kernel.bundles' => array( + 'FrameworkBundle', + ), + 'kernel.debug' => false, + 'kernel.compiled_classes' => array(), ))); } } diff --git a/src/Symfony/Framework/ClassCollectionLoader.php b/src/Symfony/Framework/ClassCollectionLoader.php index 635af855f6c6..d4d36a1298b6 100644 --- a/src/Symfony/Framework/ClassCollectionLoader.php +++ b/src/Symfony/Framework/ClassCollectionLoader.php @@ -23,6 +23,8 @@ class ClassCollectionLoader */ static public function load($classes, $cacheDir, $name, $autoReload) { + $classes = array_unique($classes); + $cache = $cacheDir.'/'.$name.'.php'; // auto-reload diff --git a/src/Symfony/Framework/DependencyInjection/KernelExtension.php b/src/Symfony/Framework/DependencyInjection/KernelExtension.php index b03b79b6651c..6613201b4a15 100644 --- a/src/Symfony/Framework/DependencyInjection/KernelExtension.php +++ b/src/Symfony/Framework/DependencyInjection/KernelExtension.php @@ -32,7 +32,6 @@ public function testLoad($config, ContainerBuilder $container) { $loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config')); $loader->load('test.xml'); - $container->setParameter('kernel.include_core_classes', false); } /** @@ -94,40 +93,6 @@ public function configLoad($config, ContainerBuilder $container) $container->setParameter('kernel.charset', $config['charset']); } - if (!array_key_exists('compilation', $config)) { - $classes = array( - 'Symfony\\Components\\Routing\\RouterInterface', - 'Symfony\\Components\\Routing\\Router', - 'Symfony\\Components\\EventDispatcher\\Event', - 'Symfony\\Components\\Routing\\Matcher\\UrlMatcherInterface', - 'Symfony\\Components\\Routing\\Matcher\\UrlMatcher', - 'Symfony\\Components\\HttpKernel\\HttpKernel', - 'Symfony\\Components\\HttpFoundation\\Request', - 'Symfony\\Components\\HttpFoundation\\Response', - 'Symfony\\Components\\HttpKernel\\ResponseListener', - 'Symfony\\Components\\Templating\\Loader\\LoaderInterface', - 'Symfony\\Components\\Templating\\Loader\\Loader', - 'Symfony\\Components\\Templating\\Loader\\FilesystemLoader', - 'Symfony\\Components\\Templating\\Engine', - 'Symfony\\Components\\Templating\\Renderer\\RendererInterface', - 'Symfony\\Components\\Templating\\Renderer\\Renderer', - 'Symfony\\Components\\Templating\\Renderer\\PhpRenderer', - 'Symfony\\Components\\Templating\\Storage\\Storage', - 'Symfony\\Components\\Templating\\Storage\\FileStorage', - 'Symfony\\Bundle\\FrameworkBundle\\RequestListener', - 'Symfony\\Bundle\\FrameworkBundle\\Controller', - 'Symfony\\Bundle\\FrameworkBundle\\Templating\\Engine', - ); - } else { - $classes = array(); - foreach (explode("\n", $config['compilation']) as $class) { - if ($class) { - $classes[] = trim($class); - } - } - } - $container->setParameter('kernel.compiled_classes', $classes); - if (array_key_exists('error_handler', $config)) { if (false === $config['error_handler']) { $container->getDefinition('error_handler')->setMethodCalls(array()); diff --git a/src/Symfony/Framework/Kernel.php b/src/Symfony/Framework/Kernel.php index 6fcaa862b302..ddc98cc331f9 100644 --- a/src/Symfony/Framework/Kernel.php +++ b/src/Symfony/Framework/Kernel.php @@ -17,6 +17,7 @@ use Symfony\Components\DependencyInjection\Loader\ClosureLoader; use Symfony\Components\HttpFoundation\Request; use Symfony\Components\HttpKernel\HttpKernelInterface; +use Symfony\Framework\ClassCollectionLoader; /* * This file is part of the Symfony package. @@ -35,6 +36,8 @@ */ abstract class Kernel implements HttpKernelInterface, \Serializable { + static protected $loaded; + protected $bundles; protected $bundleDirs; protected $container; @@ -123,6 +126,14 @@ public function boot() $this->bundleDirs = $this->registerBundleDirs(); $this->container = $this->initializeContainer(); + // load core classes + ClassCollectionLoader::load( + $this->container->getParameter('kernel.compiled_classes'), + $this->container->getParameter('kernel.cache_dir'), + 'classes', + $this->container->getParameter('kernel.debug') + ); + foreach ($this->bundles as $bundle) { $bundle->setContainer($this->container); $bundle->boot(); @@ -314,15 +325,16 @@ public function getKernelParameters() return array_merge( array( - 'kernel.root_dir' => $this->rootDir, - 'kernel.environment' => $this->environment, - 'kernel.debug' => $this->debug, - 'kernel.name' => $this->name, - 'kernel.cache_dir' => $this->getCacheDir(), - 'kernel.logs_dir' => $this->getLogDir(), - 'kernel.bundle_dirs' => $this->bundleDirs, - 'kernel.bundles' => $bundles, - 'kernel.charset' => 'UTF-8', + 'kernel.root_dir' => $this->rootDir, + 'kernel.environment' => $this->environment, + 'kernel.debug' => $this->debug, + 'kernel.name' => $this->name, + 'kernel.cache_dir' => $this->getCacheDir(), + 'kernel.logs_dir' => $this->getLogDir(), + 'kernel.bundle_dirs' => $this->bundleDirs, + 'kernel.bundles' => $bundles, + 'kernel.charset' => 'UTF-8', + 'kernel.compiled_classes' => array(), ), $this->getEnvParameters() ); diff --git a/src/Symfony/Framework/KernelBundle.php b/src/Symfony/Framework/KernelBundle.php index c9aa4d9e6980..f9e9a23a34ee 100644 --- a/src/Symfony/Framework/KernelBundle.php +++ b/src/Symfony/Framework/KernelBundle.php @@ -29,10 +29,5 @@ public function boot() if ($this->container->has('error_handler')) { $this->container['error_handler']; } - - // load core classes - if ($this->container->getParameterBag()->has('kernel.include_core_classes') && $this->container->getParameter('kernel.include_core_classes')) { - ClassCollectionLoader::load($this->container->getParameter('kernel.compiled_classes'), $this->container->getParameter('kernel.cache_dir'), 'classes', $this->container->getParameter('kernel.debug')); - } } } diff --git a/src/Symfony/Framework/Resources/config/services.xml b/src/Symfony/Framework/Resources/config/services.xml index 25ca51eb2215..8e23a44fd6e1 100644 --- a/src/Symfony/Framework/Resources/config/services.xml +++ b/src/Symfony/Framework/Resources/config/services.xml @@ -12,7 +12,6 @@ Symfony\Framework\Debug\ErrorHandler null true - true diff --git a/src/Symfony/Framework/bootstrap.php b/src/Symfony/Framework/bootstrap.php index 82735a77e9a4..c321f96a31c2 100644 --- a/src/Symfony/Framework/bootstrap.php +++ b/src/Symfony/Framework/bootstrap.php @@ -69,9 +69,7 @@ public function setContainer(ContainerInterface $container); } class KernelBundle extends Bundle { public function boot() { if ($this->container->has('error_handler')) { - $this->container['error_handler']; } - if ($this->container->getParameterBag()->has('kernel.include_core_classes') && $this->container->getParameter('kernel.include_core_classes')) { - ClassCollectionLoader::load($this->container->getParameter('kernel.compiled_classes'), $this->container->getParameter('kernel.cache_dir'), 'classes', $this->container->getParameter('kernel.debug')); } } } + $this->container['error_handler']; } } } namespace Symfony\Framework\DependencyInjection; use Symfony\Components\DependencyInjection\Extension\Extension; use Symfony\Components\DependencyInjection\Loader\XmlFileLoader; @@ -79,8 +77,7 @@ public function boot() { class KernelExtension extends Extension { public function testLoad($config, ContainerBuilder $container) { $loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config')); - $loader->load('test.xml'); - $container->setParameter('kernel.include_core_classes', false); } + $loader->load('test.xml'); } public function sessionLoad($config, ContainerBuilder $container) { if (!$container->hasDefinition('session')) { $loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config')); @@ -106,35 +103,6 @@ public function configLoad($config, ContainerBuilder $container) { $container->setDefinition('event_dispatcher', $container->findDefinition('debug.event_dispatcher')); } } if (isset($config['charset'])) { $container->setParameter('kernel.charset', $config['charset']); } - if (!array_key_exists('compilation', $config)) { - $classes = array( - 'Symfony\\Components\\Routing\\RouterInterface', - 'Symfony\\Components\\Routing\\Router', - 'Symfony\\Components\\EventDispatcher\\Event', - 'Symfony\\Components\\Routing\\Matcher\\UrlMatcherInterface', - 'Symfony\\Components\\Routing\\Matcher\\UrlMatcher', - 'Symfony\\Components\\HttpKernel\\HttpKernel', - 'Symfony\\Components\\HttpFoundation\\Request', - 'Symfony\\Components\\HttpFoundation\\Response', - 'Symfony\\Components\\HttpKernel\\ResponseListener', - 'Symfony\\Components\\Templating\\Loader\\LoaderInterface', - 'Symfony\\Components\\Templating\\Loader\\Loader', - 'Symfony\\Components\\Templating\\Loader\\FilesystemLoader', - 'Symfony\\Components\\Templating\\Engine', - 'Symfony\\Components\\Templating\\Renderer\\RendererInterface', - 'Symfony\\Components\\Templating\\Renderer\\Renderer', - 'Symfony\\Components\\Templating\\Renderer\\PhpRenderer', - 'Symfony\\Components\\Templating\\Storage\\Storage', - 'Symfony\\Components\\Templating\\Storage\\FileStorage', - 'Symfony\\Bundle\\FrameworkBundle\\RequestListener', - 'Symfony\\Bundle\\FrameworkBundle\\Controller', - 'Symfony\\Bundle\\FrameworkBundle\\Templating\\Engine', - ); } else { - $classes = array(); - foreach (explode("\n", $config['compilation']) as $class) { - if ($class) { - $classes[] = trim($class); } } } - $container->setParameter('kernel.compiled_classes', $classes); if (array_key_exists('error_handler', $config)) { if (false === $config['error_handler']) { $container->getDefinition('error_handler')->setMethodCalls(array()); } else { @@ -171,6 +139,7 @@ public function handle($level, $message, $file, $line, $context) { namespace Symfony\Framework; class ClassCollectionLoader { static public function load($classes, $cacheDir, $name, $autoReload) { + $classes = array_unique($classes); $cache = $cacheDir.'/'.$name.'.php'; $reload = false; if ($autoReload) {