Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5d5ff11

Browse files
committed
[Kernel+DIC] Fixed as_files behavior
Many issue about this: * Kernel does not handle when the dumper returns a string * Kernel does not handle when the compiled Container file does not return a new instance of itself * Kernel try to old load and clean old container, but if the container does not change its name, it tries to load 2 time the same file, and so the same class This patch fixed all theses case. Now we can use with ease a multifiles container or a simple unique file.
1 parent 081c601 commit 5d5ff11

File tree

1 file changed

+38
-13
lines changed

1 file changed

+38
-13
lines changed

src/Symfony/Component/HttpKernel/Kernel.php

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -572,18 +572,25 @@ protected function getContainerBaseClass()
572572
*/
573573
protected function initializeContainer()
574574
{
575+
$asFiles = true;
575576
$class = $this->getContainerClass();
576577
$cacheDir = $this->warmupDir ?: $this->getCacheDir();
577578
$cache = new ConfigCache($cacheDir.'/'.$class.'.php', $this->debug);
578579
$oldContainer = null;
579580
if ($fresh = $cache->isFresh()) {
581+
if (!$asFiles) {
582+
require_once $cache->getPath();
583+
$this->container = new $class();
584+
$this->container->set('kernel', $this);
585+
586+
return;
587+
}
580588
// Silence E_WARNING to ignore "include" failures - don't use "@" to prevent silencing fatal errors
581589
$errorLevel = error_reporting(\E_ALL ^ \E_WARNING);
582590
$fresh = $oldContainer = false;
583591
try {
584592
if (file_exists($cache->getPath()) && \is_object($this->container = include $cache->getPath())) {
585593
$this->container->set('kernel', $this);
586-
$oldContainer = $this->container;
587594
$fresh = true;
588595
}
589596
} catch (\Throwable $e) {
@@ -634,6 +641,13 @@ protected function initializeContainer()
634641
try {
635642
$container = null;
636643
$container = $this->buildContainer();
644+
if ($asFiles) {
645+
$container->getParameterBag()->add([
646+
'container.build_id' => 'static',
647+
'container.build_hash' => 'static',
648+
'container.as_files' => true,
649+
]);
650+
}
637651
$container->compile();
638652
} finally {
639653
if ($this->debug && true !== $previousHandler) {
@@ -657,7 +671,12 @@ protected function initializeContainer()
657671
$oldContainer = \is_object($oldContainer) ? new \ReflectionClass($oldContainer) : false;
658672

659673
$this->dumpContainer($cache, $container, $class, $this->getContainerBaseClass());
660-
$this->container = require $cache->getPath();
674+
if ($asFiles) {
675+
$this->container = require $cache->getPath();
676+
} else {
677+
require $cache->getPath();
678+
$this->container = new $class();
679+
}
661680
$this->container->set('kernel', $this);
662681

663682
if ($oldContainer && \get_class($this->container) !== $oldContainer->name) {
@@ -844,27 +863,33 @@ protected function dumpContainer(ConfigCache $cache, ContainerBuilder $container
844863
$dumper->setProxyDumper(new ProxyDumper());
845864
}
846865

866+
$asFiles = $container->hasParameter('container.as_files') ? $container->getParameter('container.as_files') : true;
867+
847868
$content = $dumper->dump([
848869
'class' => $class,
849870
'base_class' => $baseClass,
850871
'file' => $cache->getPath(),
851-
'as_files' => true,
872+
'as_files' => $asFiles,
852873
'debug' => $this->debug,
853874
'inline_class_loader_parameter' => \PHP_VERSION_ID >= 70000 && !$this->loadClassCache && !class_exists(ClassCollectionLoader::class, false) ? 'container.dumper.inline_class_loader' : null,
854875
'build_time' => $container->hasParameter('kernel.container_build_time') ? $container->getParameter('kernel.container_build_time') : time(),
855876
]);
856877

857-
$rootCode = array_pop($content);
858-
$dir = \dirname($cache->getPath()).'/';
859-
$fs = new Filesystem();
878+
if ($asFiles) {
879+
$rootCode = array_pop($content);
880+
$dir = \dirname($cache->getPath()).'/';
881+
$fs = new Filesystem();
860882

861-
foreach ($content as $file => $code) {
862-
$fs->dumpFile($dir.$file, $code);
863-
@chmod($dir.$file, 0666 & ~umask());
864-
}
865-
$legacyFile = \dirname($dir.$file).'.legacy';
866-
if (file_exists($legacyFile)) {
867-
@unlink($legacyFile);
883+
foreach ($content as $file => $code) {
884+
$fs->dumpFile($dir.$file, $code);
885+
@chmod($dir.$file, 0666 & ~umask());
886+
}
887+
$legacyFile = \dirname($dir.$file).'.legacy';
888+
if (file_exists($legacyFile)) {
889+
@unlink($legacyFile);
890+
}
891+
} else {
892+
$rootCode = $content;
868893
}
869894

870895
$cache->write($rootCode, $container->getResources());

0 commit comments

Comments
 (0)