made classes compilation more configurable
This commit is contained in:
parent
0e36f043ef
commit
7b65956343
@ -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',
|
||||
)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,7 +1,5 @@
|
||||
<?php
|
||||
|
||||
$container->setParameter('kernel.include_core_classes', false);
|
||||
|
||||
$container->loadFromExtension('kernel', 'config', array(
|
||||
'charset' => 'UTF-8',
|
||||
'error_handler' => null,
|
||||
|
@ -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"
|
||||
|
@ -1,6 +1,3 @@
|
||||
parameters:
|
||||
kernel.include_core_classes: false
|
||||
|
||||
kernel.config:
|
||||
charset: UTF-8
|
||||
error_handler: null
|
||||
|
@ -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(),
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,8 @@ class ClassCollectionLoader
|
||||
*/
|
||||
static public function load($classes, $cacheDir, $name, $autoReload)
|
||||
{
|
||||
$classes = array_unique($classes);
|
||||
|
||||
$cache = $cacheDir.'/'.$name.'.php';
|
||||
|
||||
// auto-reload
|
||||
|
@ -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());
|
||||
|
@ -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()
|
||||
);
|
||||
|
@ -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'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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) {
|
||||
|
Reference in New Issue
Block a user