Skip to content

Commit 8cb7b2e

Browse files
[DI] Generate one file per service factory
1 parent 1c5a2b1 commit 8cb7b2e

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

Command/CacheClearCommand.php

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Component\Console\Input\InputOption;
1616
use Symfony\Component\Console\Output\OutputInterface;
1717
use Symfony\Component\Console\Style\SymfonyStyle;
18+
use Symfony\Component\EventDispatcher\EventDispatcher;
1819
use Symfony\Component\Filesystem\Filesystem;
1920
use Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface;
2021
use Symfony\Component\HttpKernel\KernelInterface;
@@ -125,6 +126,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
125126

126127
$this->filesystem->remove($oldCacheDir);
127128

129+
// The current event dispatcher is stale, let's not use it anymore
130+
$this->getApplication()->setDispatcher(new EventDispatcher());
131+
128132
if ($output->isVerbose()) {
129133
$io->comment('Finished');
130134
}
@@ -213,13 +217,19 @@ protected function warmup($warmupDir, $realCacheDir, $enableOptionalWarmers = tr
213217
}
214218

215219
// fix references to container's class
216-
$tempContainerClass = get_class($tempKernel->getContainer());
217-
$realContainerClass = get_class($realKernel->getContainer());
220+
$tempContainerClass = $tempKernel->getContainerClass();
221+
$realContainerClass = $tempKernel->getRealContainerClass();
218222
foreach (Finder::create()->files()->depth('<2')->name($tempContainerClass.'*')->in($warmupDir) as $file) {
219223
$content = str_replace($tempContainerClass, $realContainerClass, file_get_contents($file));
220224
file_put_contents($file, $content);
221225
rename($file, str_replace(DIRECTORY_SEPARATOR.$tempContainerClass, DIRECTORY_SEPARATOR.$realContainerClass, $file));
222226
}
227+
if (is_dir($tempContainerDir = $warmupDir.'/'.get_class($tempKernel->getContainer()))) {
228+
foreach (Finder::create()->files()->in($tempContainerDir) as $file) {
229+
$content = str_replace($tempContainerClass, $realContainerClass, file_get_contents($file));
230+
file_put_contents($file, $content);
231+
}
232+
}
223233

224234
// remove temp kernel file after cache warmed up
225235
@unlink($tempKernelFile);
@@ -245,7 +255,9 @@ protected function getTempKernel(KernelInterface $parent, $namespace, $parentCla
245255
// to avoid the many problems in serialized resources files
246256
$class = substr($parentClass, 0, -1).'_';
247257
// the temp container class must be changed too
248-
$containerClass = var_export(substr(get_class($parent->getContainer()), 0, -1).'_', true);
258+
$container = $parent->getContainer();
259+
$realContainerClass = var_export($container->hasParameter('kernel.container_class') ? $container->getParameter('kernel.container_class') : get_class($parent->getContainer()), true);
260+
$containerClass = substr_replace($realContainerClass, '_', -2, 1);
249261

250262
if (method_exists($parent, 'getProjectDir')) {
251263
$projectDir = var_export(realpath($parent->getProjectDir()), true);
@@ -281,7 +293,12 @@ public function getLogDir()
281293
return $logDir;
282294
}
283295
284-
protected function getContainerClass()
296+
public function getRealContainerClass()
297+
{
298+
return $realContainerClass;
299+
}
300+
301+
public function getContainerClass()
285302
{
286303
return $containerClass;
287304
}

Tests/Command/CacheClearCommand/CacheClearCommandTest.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,9 @@ public function testCacheIsFreshAfterCacheClearedWithWarmup()
6868
}
6969

7070
// check that app kernel file present in meta file of container's cache
71-
$containerRef = new \ReflectionObject($this->kernel->getContainer());
72-
$containerFile = $containerRef->getFileName();
71+
$containerClass = $this->kernel->getContainer()->getParameter('kernel.container_class');
72+
$containerRef = new \ReflectionClass($containerClass);
73+
$containerFile = dirname(dirname($containerRef->getFileName())).'/'.$containerClass.'.php';
7374
$containerMetaFile = $containerFile.'.meta';
7475
$kernelRef = new \ReflectionObject($this->kernel);
7576
$kernelFile = $kernelRef->getFileName();
@@ -83,6 +84,12 @@ public function testCacheIsFreshAfterCacheClearedWithWarmup()
8384
}
8485
}
8586
$this->assertTrue($found, 'Kernel file should present as resource');
86-
$this->assertRegExp(sprintf('/\'kernel.container_class\'\s*=>\s*\'%s\'/', get_class($this->kernel->getContainer())), file_get_contents($containerFile), 'kernel.container_class is properly set on the dumped container');
87+
88+
if (defined('HHVM_VERSION')) {
89+
return;
90+
}
91+
$containerRef = new \ReflectionClass(require $containerFile);
92+
$containerFile = str_replace('tes_'.DIRECTORY_SEPARATOR, 'test'.DIRECTORY_SEPARATOR, $containerRef->getFileName());
93+
$this->assertRegExp(sprintf('/\'kernel.container_class\'\s*=>\s*\'%s\'/', $containerClass), file_get_contents($containerFile), 'kernel.container_class is properly set on the dumped container');
8794
}
8895
}

0 commit comments

Comments
 (0)