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

Skip to content

Commit 4ab8996

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 4ab8996

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

src/Symfony/Component/HttpKernel/Kernel.php

Lines changed: 33 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,10 @@ protected function initializeContainer()
634641
try {
635642
$container = null;
636643
$container = $this->buildContainer();
644+
$container->getParameterBag()->add([
645+
'container.build_id' => 'static',
646+
'container.as_files' => $asFiles,
647+
]);
637648
$container->compile();
638649
} finally {
639650
if ($this->debug && true !== $previousHandler) {
@@ -657,7 +668,12 @@ protected function initializeContainer()
657668
$oldContainer = \is_object($oldContainer) ? new \ReflectionClass($oldContainer) : false;
658669

659670
$this->dumpContainer($cache, $container, $class, $this->getContainerBaseClass());
660-
$this->container = require $cache->getPath();
671+
if ($asFiles) {
672+
$this->container = require $cache->getPath();
673+
} else {
674+
require $cache->getPath();
675+
$this->container = new $class();
676+
}
661677
$this->container->set('kernel', $this);
662678

663679
if ($oldContainer && \get_class($this->container) !== $oldContainer->name) {
@@ -848,23 +864,27 @@ protected function dumpContainer(ConfigCache $cache, ContainerBuilder $container
848864
'class' => $class,
849865
'base_class' => $baseClass,
850866
'file' => $cache->getPath(),
851-
'as_files' => true,
867+
'as_files' => $container->hasParameter('container.as_files') ? $container->getParameter('container.as_files') : true,
852868
'debug' => $this->debug,
853869
'inline_class_loader_parameter' => \PHP_VERSION_ID >= 70000 && !$this->loadClassCache && !class_exists(ClassCollectionLoader::class, false) ? 'container.dumper.inline_class_loader' : null,
854870
'build_time' => $container->hasParameter('kernel.container_build_time') ? $container->getParameter('kernel.container_build_time') : time(),
855871
]);
856872

857-
$rootCode = array_pop($content);
858-
$dir = \dirname($cache->getPath()).'/';
859-
$fs = new Filesystem();
873+
if (\is_array($content)) {
874+
$rootCode = array_pop($content);
875+
$dir = \dirname($cache->getPath()).'/';
876+
$fs = new Filesystem();
860877

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);
878+
foreach ($content as $file => $code) {
879+
$fs->dumpFile($dir.$file, $code);
880+
@chmod($dir.$file, 0666 & ~umask());
881+
}
882+
$legacyFile = \dirname($dir.$file).'.legacy';
883+
if (file_exists($legacyFile)) {
884+
@unlink($legacyFile);
885+
}
886+
} else {
887+
$rootCode = $content;
868888
}
869889

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

0 commit comments

Comments
 (0)