made ClassCollectionLoader smarter
This commit is contained in:
parent
68af528813
commit
e03642dfa6
@ -58,6 +58,20 @@ class WebExtension extends Extension
|
|||||||
}
|
}
|
||||||
|
|
||||||
$container->setParameter('routing.resource', $config['router']['resource']);
|
$container->setParameter('routing.resource', $config['router']['resource']);
|
||||||
|
|
||||||
|
$this->addCompiledClasses($container, array(
|
||||||
|
'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\\Components\\Routing\\Loader\\Loader',
|
||||||
|
'Symfony\\Components\\Routing\\Loader\\DelegatingLoader',
|
||||||
|
'Symfony\\Components\\Routing\\Loader\\LoaderResolver',
|
||||||
|
'Symfony\\Bundle\\FrameworkBundle\\Routing\\LoaderResolver',
|
||||||
|
'Symfony\\Bundle\\FrameworkBundle\\Routing\\DelegatingLoader',
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($config['toolbar']) && $config['toolbar']) {
|
if (isset($config['toolbar']) && $config['toolbar']) {
|
||||||
@ -164,20 +178,24 @@ class WebExtension extends Extension
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$container->setParameter('kernel.compiled_classes', array_merge($container->getParameter('kernel.compiled_classes'), array(
|
$this->addCompiledClasses($container, array(
|
||||||
'Symfony\\Components\\EventDispatcher\\Event',
|
'Symfony\\Components\\HttpFoundation\\ParameterBag',
|
||||||
'Symfony\\Components\\HttpKernel\\ResponseListener',
|
'Symfony\\Components\\HttpFoundation\\HeaderBag',
|
||||||
'Symfony\\Bundle\\FrameworkBundle\\Controller',
|
'Symfony\\Components\\HttpFoundation\\Request',
|
||||||
|
'Symfony\\Components\\HttpFoundation\\Response',
|
||||||
|
|
||||||
|
'Symfony\\Components\\HttpKernel\\HttpKernel',
|
||||||
|
'Symfony\\Components\\HttpKernel\\ResponseListener',
|
||||||
|
'Symfony\\Components\\HttpKernel\\Controller\\ControllerResolver',
|
||||||
|
|
||||||
// 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',
|
'Symfony\\Bundle\\FrameworkBundle\\RequestListener',
|
||||||
)));
|
'Symfony\\Bundle\\FrameworkBundle\\Controller\\ControllerNameConverter',
|
||||||
|
'Symfony\\Bundle\\FrameworkBundle\\Controller\\ControllerResolver',
|
||||||
|
|
||||||
|
'Symfony\\Components\\EventDispatcher\\Event',
|
||||||
|
|
||||||
|
'Symfony\\Bundle\\FrameworkBundle\\Controller',
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -243,7 +261,7 @@ class WebExtension extends Extension
|
|||||||
}
|
}
|
||||||
|
|
||||||
// compilation
|
// compilation
|
||||||
$container->setParameter('kernel.compiled_classes', array_merge($container->getParameter('kernel.compiled_classes'), array(
|
$this->addCompiledClasses($container, array(
|
||||||
'Symfony\\Components\\Templating\\Loader\\LoaderInterface',
|
'Symfony\\Components\\Templating\\Loader\\LoaderInterface',
|
||||||
'Symfony\\Components\\Templating\\Loader\\Loader',
|
'Symfony\\Components\\Templating\\Loader\\Loader',
|
||||||
'Symfony\\Components\\Templating\\Loader\\FilesystemLoader',
|
'Symfony\\Components\\Templating\\Loader\\FilesystemLoader',
|
||||||
@ -254,7 +272,17 @@ class WebExtension extends Extension
|
|||||||
'Symfony\\Components\\Templating\\Storage\\Storage',
|
'Symfony\\Components\\Templating\\Storage\\Storage',
|
||||||
'Symfony\\Components\\Templating\\Storage\\FileStorage',
|
'Symfony\\Components\\Templating\\Storage\\FileStorage',
|
||||||
'Symfony\\Bundle\\FrameworkBundle\\Templating\\Engine',
|
'Symfony\\Bundle\\FrameworkBundle\\Templating\\Engine',
|
||||||
)));
|
'Symfony\\Components\\Templating\\Helper\\Helper',
|
||||||
|
'Symfony\\Components\\Templating\\Helper\\SlotsHelper',
|
||||||
|
'Symfony\\Bundle\\FrameworkBundle\\Templating\\Helper\\ActionsHelper',
|
||||||
|
'Symfony\\Bundle\\FrameworkBundle\\Templating\\Helper\\RouterHelper',
|
||||||
|
'Symfony\\Bundle\\FrameworkBundle\\Templating\\Helper\\RouterHelper',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function addCompiledClasses($container, array $classes)
|
||||||
|
{
|
||||||
|
$container->setParameter('kernel.compiled_classes', array_merge($container->getParameter('kernel.compiled_classes'), $classes));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,19 +21,35 @@ class ClassCollectionLoader
|
|||||||
static protected $loaded;
|
static protected $loaded;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Loads a list of classes and caches them in one big file.
|
||||||
|
*
|
||||||
|
* @param array $classes An array of classes to load
|
||||||
|
* @param string $cacheDir A cache directory
|
||||||
|
* @param string $name The cache name prefix
|
||||||
|
* @param Boolean $autoReload Whether to flush the cache when the cache is stale or not
|
||||||
|
* @param Boolean $adaptive Whether to remove already declared classes or not
|
||||||
|
*
|
||||||
* @throws \InvalidArgumentException When class can't be loaded
|
* @throws \InvalidArgumentException When class can't be loaded
|
||||||
*/
|
*/
|
||||||
static public function load($classes, $cacheDir, $name, $autoReload)
|
static public function load($classes, $cacheDir, $name, $autoReload, $adaptive = false)
|
||||||
{
|
{
|
||||||
// each $name can only be loaded once per PHP process
|
// each $name can only be loaded once per PHP process
|
||||||
if (isset(self::$loaded[$name])) {
|
if (isset(self::$loaded[$name])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self::$loaded[$name] = true;
|
|
||||||
|
|
||||||
$classes = array_unique($classes);
|
$classes = array_unique($classes);
|
||||||
|
|
||||||
|
if ($adaptive) {
|
||||||
|
// don't include already declared classes
|
||||||
|
$classes = array_diff($classes, get_declared_classes());
|
||||||
|
|
||||||
|
// the cache is different depending on which classes are already declared
|
||||||
|
$name = $name.'-'.substr(md5(implode('|', $classes)), 0, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$loaded[$name] = true;
|
||||||
|
|
||||||
$cache = $cacheDir.'/'.$name.'.php';
|
$cache = $cacheDir.'/'.$name.'.php';
|
||||||
|
|
||||||
// auto-reload
|
// auto-reload
|
||||||
|
@ -129,7 +129,8 @@ abstract class Kernel implements HttpKernelInterface, \Serializable
|
|||||||
$this->container->getParameter('kernel.compiled_classes'),
|
$this->container->getParameter('kernel.compiled_classes'),
|
||||||
$this->container->getParameter('kernel.cache_dir'),
|
$this->container->getParameter('kernel.cache_dir'),
|
||||||
'classes',
|
'classes',
|
||||||
$this->container->getParameter('kernel.debug')
|
$this->container->getParameter('kernel.debug'),
|
||||||
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
foreach ($this->bundles as $bundle) {
|
foreach ($this->bundles as $bundle) {
|
||||||
|
@ -138,11 +138,14 @@ class ErrorHandler {
|
|||||||
namespace Symfony\Framework;
|
namespace Symfony\Framework;
|
||||||
class ClassCollectionLoader {
|
class ClassCollectionLoader {
|
||||||
static protected $loaded;
|
static protected $loaded;
|
||||||
static public function load($classes, $cacheDir, $name, $autoReload) {
|
static public function load($classes, $cacheDir, $name, $autoReload, $strict = false) {
|
||||||
if (isset(self::$loaded[$name])) {
|
if (isset(self::$loaded[$name])) {
|
||||||
return; }
|
return; }
|
||||||
self::$loaded[$name] = true;
|
|
||||||
$classes = array_unique($classes);
|
$classes = array_unique($classes);
|
||||||
|
if ($strict) {
|
||||||
|
$classes = array_diff($classes, get_declared_classes());
|
||||||
|
$name = $name.'-'.substr(md5(implode('|', $classes)), 0, 5); }
|
||||||
|
self::$loaded[$name] = true;
|
||||||
$cache = $cacheDir.'/'.$name.'.php';
|
$cache = $cacheDir.'/'.$name.'.php';
|
||||||
$reload = false;
|
$reload = false;
|
||||||
if ($autoReload) {
|
if ($autoReload) {
|
||||||
|
Reference in New Issue
Block a user