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']);
|
||||
|
||||
$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']) {
|
||||
@ -164,20 +178,24 @@ class WebExtension extends Extension
|
||||
}
|
||||
}
|
||||
|
||||
$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',
|
||||
$this->addCompiledClasses($container, array(
|
||||
'Symfony\\Components\\HttpFoundation\\ParameterBag',
|
||||
'Symfony\\Components\\HttpFoundation\\HeaderBag',
|
||||
'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\\Controller\\ControllerNameConverter',
|
||||
'Symfony\\Bundle\\FrameworkBundle\\Controller\\ControllerResolver',
|
||||
|
||||
'Symfony\\Components\\EventDispatcher\\Event',
|
||||
|
||||
'Symfony\\Bundle\\FrameworkBundle\\Controller',
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -243,7 +261,7 @@ class WebExtension extends Extension
|
||||
}
|
||||
|
||||
// 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\\Loader',
|
||||
'Symfony\\Components\\Templating\\Loader\\FilesystemLoader',
|
||||
@ -254,7 +272,17 @@ class WebExtension extends Extension
|
||||
'Symfony\\Components\\Templating\\Storage\\Storage',
|
||||
'Symfony\\Components\\Templating\\Storage\\FileStorage',
|
||||
'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;
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
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
|
||||
if (isset(self::$loaded[$name])) {
|
||||
return;
|
||||
}
|
||||
|
||||
self::$loaded[$name] = true;
|
||||
|
||||
$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';
|
||||
|
||||
// auto-reload
|
||||
|
@ -129,7 +129,8 @@ abstract class Kernel implements HttpKernelInterface, \Serializable
|
||||
$this->container->getParameter('kernel.compiled_classes'),
|
||||
$this->container->getParameter('kernel.cache_dir'),
|
||||
'classes',
|
||||
$this->container->getParameter('kernel.debug')
|
||||
$this->container->getParameter('kernel.debug'),
|
||||
true
|
||||
);
|
||||
|
||||
foreach ($this->bundles as $bundle) {
|
||||
|
@ -138,11 +138,14 @@ class ErrorHandler {
|
||||
namespace Symfony\Framework;
|
||||
class ClassCollectionLoader {
|
||||
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])) {
|
||||
return; }
|
||||
self::$loaded[$name] = true;
|
||||
$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';
|
||||
$reload = false;
|
||||
if ($autoReload) {
|
||||
|
Reference in New Issue
Block a user