浏览代码

made classes compilation more configurable

Fabien Potencier 15 年之前
父节点
当前提交
7b65956343

+ 29 - 0
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/WebExtension.php

@@ -163,6 +163,21 @@ class WebExtension extends Extension
                 $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 @@ class WebExtension extends Extension
             $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',
+        )));
     }
 
     /**

+ 0 - 2
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/php/config/config.php

@@ -1,7 +1,5 @@
 <?php
 
-$container->setParameter('kernel.include_core_classes', false);
-
 $container->loadFromExtension('kernel', 'config', array(
     'charset'       => 'UTF-8',
     'error_handler' => null,

+ 0 - 4
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">
 
-    <parameters>
-        <parameter key="kernel.include_core_classes">false</parameter>
-    </parameters>
-
     <kernel:config
         charset="UTF-8"
         error_handler="null"

+ 0 - 3
src/Symfony/Bundle/FrameworkBundle/Resources/skeleton/application/yml/config/config.yml

@@ -1,6 +1,3 @@
-parameters:
-    kernel.include_core_classes: false
-
 kernel.config:
     charset:       UTF-8
     error_handler: null

+ 13 - 16
src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/WebExtensionTest.php

@@ -20,14 +20,14 @@ class WebExtensionTest extends TestCase
 {
     public function testConfigLoad()
     {
-        $container = new ContainerBuilder();
-        $loader = $this->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 @@ class WebExtensionTest extends TestCase
     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 @@ class WebExtensionTest extends TestCase
     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 @@ class WebExtensionTest extends TestCase
         $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(),
         )));
     }
 }

+ 2 - 0
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

+ 0 - 35
src/Symfony/Framework/DependencyInjection/KernelExtension.php

@@ -32,7 +32,6 @@ class KernelExtension extends Extension
     {
         $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 @@ class KernelExtension extends Extension
             $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());

+ 21 - 9
src/Symfony/Framework/Kernel.php

@@ -17,6 +17,7 @@ use Symfony\Components\DependencyInjection\Loader\PhpFileLoader;
 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 @@ use Symfony\Components\HttpKernel\HttpKernelInterface;
  */
 abstract class Kernel implements HttpKernelInterface, \Serializable
 {
+    static protected $loaded;
+
     protected $bundles;
     protected $bundleDirs;
     protected $container;
@@ -123,6 +126,14 @@ abstract class Kernel implements HttpKernelInterface, \Serializable
         $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 @@ abstract class Kernel implements HttpKernelInterface, \Serializable
 
         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()
         );

+ 0 - 5
src/Symfony/Framework/KernelBundle.php

@@ -29,10 +29,5 @@ class KernelBundle extends Bundle
         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'));
-        }
     }
 }

+ 0 - 1
src/Symfony/Framework/Resources/config/services.xml

@@ -12,7 +12,6 @@
         <parameter key="error_handler.class">Symfony\Framework\Debug\ErrorHandler</parameter>
         <parameter key="error_handler.level">null</parameter>
         <parameter key="error_handler.enable">true</parameter>
-        <parameter key="kernel.include_core_classes">true</parameter>
     </parameters>
 
     <services>

+ 3 - 34
src/Symfony/Framework/bootstrap.php

@@ -69,9 +69,7 @@ use Symfony\Framework\ClassCollectionLoader;
 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 @@ use Symfony\Components\DependencyInjection\ContainerBuilder;
 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 @@ class KernelExtension extends Extension {
                 $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 @@ class ErrorHandler {
 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) {