Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1735544

Browse files
[HttpKernel] allow cache warmers to add to the list of preloaded classes and files
1 parent4dabd00 commit1735544

File tree

24 files changed

+150
-26
lines changed

24 files changed

+150
-26
lines changed

‎UPGRADE-5.1.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ HttpFoundation
3939
`__construct()` instead)
4040
* Made the Mime component an optional dependency
4141

42+
HttpKernel
43+
----------
44+
45+
* Made`WarmableInterface::warmUp()` return a list of classes or files to preload on PHP 7.4+
46+
not returning an array is deprecated
47+
4248
Mailer
4349
------
4450

‎UPGRADE-6.0.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ HttpFoundation
3636
`RedirectResponse::create()`, and`StreamedResponse::create()` methods (use
3737
`__construct()` instead)
3838

39+
HttpKernel
40+
----------
41+
42+
* Made`WarmableInterface::warmUp()` return a list of classes or files to preload on PHP 7.4+
43+
3944
Messenger
4045
---------
4146

‎src/Symfony/Bridge/Doctrine/CacheWarmer/ProxyCacheWarmer.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,12 @@ public function isOptional()
4343

4444
/**
4545
* {@inheritdoc}
46+
*
47+
* @return string[] A list of files to preload on PHP 7.4+
4648
*/
4749
publicfunctionwarmUp(string$cacheDir)
4850
{
51+
$files = [];
4952
foreach ($this->registry->getManagers()as$em) {
5053
// we need the directory no matter the proxy cache generation strategy
5154
if (!is_dir($proxyCacheDir =$em->getConfiguration()->getProxyDir())) {
@@ -64,6 +67,14 @@ public function warmUp(string $cacheDir)
6467
$classes =$em->getMetadataFactory()->getAllMetadata();
6568

6669
$em->getProxyFactory()->generateProxyClasses($classes);
70+
71+
foreach (scandir($proxyCacheDir)as$file) {
72+
if (!is_dir($file =$proxyCacheDir.'/'.$file)) {
73+
$files[] =$file;
74+
}
75+
}
6776
}
77+
78+
return$files;
6879
}
6980
}

‎src/Symfony/Bundle/FrameworkBundle/CacheWarmer/AbstractPhpFileCacheWarmer.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public function isOptional()
4242

4343
/**
4444
* {@inheritdoc}
45+
*
46+
* @return string[] A list of classes to preload on PHP 7.4+
4547
*/
4648
publicfunctionwarmUp(string$cacheDir)
4749
{
@@ -61,12 +63,15 @@ public function warmUp(string $cacheDir)
6163
// so here we un-serialize the values first
6264
$values =array_map(function ($val) {returnnull !==$val ?unserialize($val) :null; },$arrayAdapter->getValues());
6365

64-
$this->warmUpPhpArrayAdapter(newPhpArrayAdapter($this->phpArrayFile,newNullAdapter()),$values);
66+
return$this->warmUpPhpArrayAdapter(newPhpArrayAdapter($this->phpArrayFile,newNullAdapter()),$values);
6567
}
6668

69+
/**
70+
* @return string[] A list of classes to preload on PHP 7.4+
71+
*/
6772
protectedfunctionwarmUpPhpArrayAdapter(PhpArrayAdapter$phpArrayAdapter,array$values)
6873
{
69-
$phpArrayAdapter->warmUp($values);
74+
return (array)$phpArrayAdapter->warmUp($values);
7075
}
7176

7277
/**

‎src/Symfony/Bundle/FrameworkBundle/CacheWarmer/CachePoolClearerCacheWarmer.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,18 @@ public function __construct(Psr6CacheClearer $poolClearer, array $pools = [])
3636

3737
/**
3838
* {@inheritdoc}
39+
*
40+
* @return string[]
3941
*/
40-
publicfunctionwarmUp($cacheDirectory):void
42+
publicfunctionwarmUp($cacheDirectory):array
4143
{
4244
foreach ($this->poolsas$pool) {
4345
if ($this->poolClearer->hasPool($pool)) {
4446
$this->poolClearer->clearPool($pool);
4547
}
4648
}
49+
50+
return [];
4751
}
4852

4953
/**

‎src/Symfony/Bundle/FrameworkBundle/CacheWarmer/RouterCacheWarmer.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ public function __construct(ContainerInterface $container)
3636

3737
/**
3838
* {@inheritdoc}
39+
*
40+
* @return string[]
3941
*/
4042
publicfunctionwarmUp(string$cacheDir)
4143
{
4244
$router =$this->container->get('router');
4345

4446
if ($routerinstanceof WarmableInterface) {
45-
$router->warmUp($cacheDir);
46-
47-
return;
47+
return (array)$router->warmUp($cacheDir);
4848
}
4949

5050
thrownew \LogicException(sprintf('The router "%s" cannot be warmed up because it does not implement "%s".',get_debug_type($router), WarmableInterface::class));

‎src/Symfony/Bundle/FrameworkBundle/CacheWarmer/TranslationsCacheWarmer.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public function __construct(ContainerInterface $container)
3535

3636
/**
3737
* {@inheritdoc}
38+
*
39+
* @return string[]
3840
*/
3941
publicfunctionwarmUp(string$cacheDir)
4042
{
@@ -43,8 +45,10 @@ public function warmUp(string $cacheDir)
4345
}
4446

4547
if ($this->translatorinstanceof WarmableInterface) {
46-
$this->translator->warmUp($cacheDir);
48+
return (array)$this->translator->warmUp($cacheDir);
4749
}
50+
51+
return [];
4852
}
4953

5054
/**

‎src/Symfony/Bundle/FrameworkBundle/CacheWarmer/ValidatorCacheWarmer.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,13 @@ protected function doWarmUp(string $cacheDir, ArrayAdapter $arrayAdapter)
6868
returntrue;
6969
}
7070

71+
/**
72+
* @return string[] A list of classes to preload on PHP 7.4+
73+
*/
7174
protectedfunctionwarmUpPhpArrayAdapter(PhpArrayAdapter$phpArrayAdapter,array$values)
7275
{
7376
// make sure we don't cache null values
74-
parent::warmUpPhpArrayAdapter($phpArrayAdapter,array_filter($values));
77+
returnparent::warmUpPhpArrayAdapter($phpArrayAdapter,array_filter($values));
7578
}
7679

7780
/**

‎src/Symfony/Bundle/FrameworkBundle/Command/CacheClearCommand.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
useSymfony\Component\Console\Input\InputOption;
1818
useSymfony\Component\Console\Output\OutputInterface;
1919
useSymfony\Component\Console\Style\SymfonyStyle;
20+
useSymfony\Component\DependencyInjection\Dumper\Preloader;
2021
useSymfony\Component\EventDispatcher\EventDispatcher;
2122
useSymfony\Component\Filesystem\Exception\IOException;
2223
useSymfony\Component\Filesystem\Filesystem;
@@ -117,7 +118,11 @@ protected function execute(InputInterface $input, OutputInterface $output): int
117118
$warmer =$kernel->getContainer()->get('cache_warmer');
118119
// non optional warmers already ran during container compilation
119120
$warmer->enableOnlyOptionalWarmers();
120-
$warmer->warmUp($realCacheDir);
121+
$preload = (array)$warmer->warmUp($warmupDir);
122+
123+
if (file_exists($preloadFile =$warmupDir.'/'.$kernel->getContainer()->getParameter('kernel.container_class').'.preload.php')) {
124+
Preloader::append($preloadFile,$preload);
125+
}
121126
}
122127
}else {
123128
$fs->mkdir($warmupDir);
@@ -193,7 +198,11 @@ private function warmup(string $warmupDir, string $realCacheDir, bool $enableOpt
193198
$warmer =$kernel->getContainer()->get('cache_warmer');
194199
// non optional warmers already ran during container compilation
195200
$warmer->enableOnlyOptionalWarmers();
196-
$warmer->warmUp($warmupDir);
201+
$preload = (array)$warmer->warmUp($warmupDir);
202+
203+
if (file_exists($preloadFile =$warmupDir.'/'.$kernel->getContainer()->getParameter('kernel.container_class').'.preload.php')) {
204+
Preloader::append($preloadFile,$preload);
205+
}
197206
}
198207

199208
// fix references to cached files with the real cache directory name

‎src/Symfony/Bundle/FrameworkBundle/Routing/Router.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,11 @@
2121
useSymfony\Component\DependencyInjection\Exception\ParameterNotFoundException;
2222
useSymfony\Component\DependencyInjection\Exception\RuntimeException;
2323
useSymfony\Component\HttpKernel\CacheWarmer\WarmableInterface;
24-
useSymfony\Component\Routing\Annotation\Route;
2524
useSymfony\Component\Routing\RequestContext;
2625
useSymfony\Component\Routing\RouteCollection;
2726
useSymfony\Component\Routing\RouterasBaseRouter;
2827
useSymfony\Contracts\Service\ServiceSubscriberInterface;
2928

30-
// Help opcache.preload discover always-needed symbols
31-
class_exists(RedirectableCompiledUrlMatcher::class);
32-
class_exists(Route::class);
33-
3429
/**
3530
* This Router creates the Loader only when the cache is empty.
3631
*
@@ -90,6 +85,8 @@ public function getRouteCollection()
9085

9186
/**
9287
* {@inheritdoc}
88+
*
89+
* @return string[] A list of classes to preload on PHP 7.4+
9390
*/
9491
publicfunctionwarmUp(string$cacheDir)
9592
{
@@ -101,6 +98,11 @@ public function warmUp(string $cacheDir)
10198
$this->getGenerator();
10299

103100
$this->setOption('cache_dir',$currentDir);
101+
102+
return [
103+
$this->getOption('generator_class'),
104+
$this->getOption('matcher_class'),
105+
];
104106
}
105107

106108
/**

‎src/Symfony/Bundle/FrameworkBundle/Translation/Translator.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ public function __construct(ContainerInterface $container, MessageFormatterInter
9595

9696
/**
9797
* {@inheritdoc}
98+
*
99+
* @return string[]
98100
*/
99101
publicfunctionwarmUp(string$cacheDir)
100102
{
@@ -113,6 +115,8 @@ public function warmUp(string $cacheDir)
113115

114116
$this->loadCatalogue($locale);
115117
}
118+
119+
return [];
116120
}
117121

118122
publicfunctionaddResource(string$format,$resource,string$locale,string$domain =null)

‎src/Symfony/Bundle/SecurityBundle/CacheWarmer/ExpressionCacheWarmer.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,15 @@ public function isOptional()
3434
returntrue;
3535
}
3636

37+
/**
38+
* @return string[]
39+
*/
3740
publicfunctionwarmUp(string$cacheDir)
3841
{
3942
foreach ($this->expressionsas$expression) {
4043
$this->expressionLanguage->parse($expression, ['token','user','object','subject','roles','request','trust_resolver']);
4144
}
45+
46+
return [];
4247
}
4348
}

‎src/Symfony/Bundle/TwigBundle/CacheWarmer/TemplateCacheWarmer.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,31 @@ public function __construct(ContainerInterface $container, iterable $iterator)
3737

3838
/**
3939
* {@inheritdoc}
40+
*
41+
* @return string[] A list of template files to preload on PHP 7.4+
4042
*/
4143
publicfunctionwarmUp(string$cacheDir)
4244
{
4345
if (null ===$this->twig) {
4446
$this->twig =$this->container->get('twig');
4547
}
4648

49+
$files = [];
50+
4751
foreach ($this->iteratoras$template) {
4852
try {
49-
$this->twig->load($template);
53+
$template =$this->twig->load($template);
54+
55+
if (\is_callable([$template,'unwrap'])) {
56+
$files[] = (new \ReflectionClass($template->unwrap()))->getFileName();
57+
}
5058
}catch (Error$e) {
5159
// problem during compilation, give up
5260
// might be a syntax error or a non-Twig template
5361
}
5462
}
63+
64+
return$files;
5565
}
5666

5767
/**

‎src/Symfony/Component/Cache/Adapter/PhpArrayAdapter.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,8 @@ public function clear(string $prefix = '')
291291
* Store an array of cached values.
292292
*
293293
* @param array $values The cached values
294+
*
295+
* @return string[] A list of classes to preload on PHP 7.4+
294296
*/
295297
publicfunctionwarmUp(array$values)
296298
{
@@ -314,6 +316,7 @@ public function warmUp(array $values)
314316
}
315317
}
316318

319+
$preload = [];
317320
$dumpedValues ='';
318321
$dumpedMap = [];
319322
$dump = <<<'EOF'
@@ -334,7 +337,7 @@ public function warmUp(array $values)
334337
$value ="'N;'";
335338
}elseif (\is_object($value) ||\is_array($value)) {
336339
try {
337-
$value = VarExporter::export($value,$isStaticValue);
340+
$value = VarExporter::export($value,$isStaticValue,$preload);
338341
}catch (\Exception$e) {
339342
thrownewInvalidArgumentException(sprintf('Cache key "%s" has non-serializable "%s" value.',$key,get_debug_type($value)),0,$e);
340343
}
@@ -376,6 +379,8 @@ public function warmUp(array $values)
376379
unset(self::$valuesCache[$this->file]);
377380

378381
$this->initialize();
382+
383+
return$preload;
379384
}
380385

381386
/**

‎src/Symfony/Component/DependencyInjection/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ CHANGELOG
77
* added support to autowire public typed properties in php 7.4
88
* added support for defining method calls, a configurator, and property setters in`InlineServiceConfigurator`
99
* added possibility to define abstract service arguments
10+
* added class`Symfony\Component\DependencyInjection\Dumper\Preloader` to help with preloading on PHP 7.4+
1011

1112
5.0.0
1213
-----

‎src/Symfony/Component/DependencyInjection/Dumper/Preloader.php

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,31 @@
1313

1414
/**
1515
* @author Nicolas Grekas <p@tchwork.com>
16-
*
17-
* @internal
1816
*/
19-
class Preloader
17+
finalclass Preloader
2018
{
21-
publicstaticfunctionpreload(array$classes)
19+
publicstaticfunctionappend(string$file,array$list):void
20+
{
21+
if (!file_exists($file)) {
22+
thrownew \LogicException(sprintf('File "%s" does not exist.',$file));
23+
}
24+
25+
$cacheDir =\dirname($file);
26+
$classes = [];
27+
28+
foreach ($listas$item) {
29+
if (0 ===strpos($item,$cacheDir)) {
30+
file_put_contents($file,sprintf("require __DIR__.%s;\n",var_export(substr($item,\strlen($cacheDir)),true)),FILE_APPEND);
31+
continue;
32+
}
33+
34+
$classes[] =sprintf("\$classes[] = %s;\n",var_export($item,true));
35+
}
36+
37+
file_put_contents($file,sprintf("\n\$classes = [];\n%sPreloader::preload(\$classes);\n",implode('',$classes)),FILE_APPEND);
38+
}
39+
40+
publicstaticfunctionpreload(array$classes):void
2241
{
2342
set_error_handler(function ($t,$m,$f,$l) {
2443
if (error_reporting() &$t) {

‎src/Symfony/Component/HttpKernel/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ CHANGELOG
66

77
* allowed using public aliases to reference controllers
88
* added session usage reporting when the`_stateless` attribute of the request is set to`true`
9+
* made`WarmableInterface::warmUp()` return a list of classes or files to preload on PHP 7.4+;
10+
not returning an array is deprecated
911

1012
5.0.0
1113
-----

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp