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

Commitc75dbca

Browse files
HeahDudechalasr
authored andcommitted
[DependencyInjection][HttpKernel] Introduce build parameters
1 parent4785cc7 commitc75dbca

File tree

14 files changed

+173
-81
lines changed

14 files changed

+173
-81
lines changed

‎UPGRADE-6.3.md‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
UPGRADE FROM 6.2 to 6.3
22
=======================
33

4+
DependencyInjection
5+
-------------------
6+
7+
* Deprecate`PhpDumper` options`inline_factories_parameter` and`inline_class_loader_parameter`, use`inline_factories` and`inline_class_loader` instead
8+
9+
HttpKernel
10+
----------
11+
12+
* Deprecate parameters`container.dumper.inline_factories` and`container.dumper.inline_class_loader`, use`.container.dumper.inline_factories` and`.container.dumper.inline_class_loader` instead
13+
414
SecurityBundle
515
--------------
616

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
CHANGELOG
22
=========
33

4+
6.3
5+
---
6+
7+
* Add options`inline_factories` and`inline_class_loader` to`PhpDumper::dump()`
8+
* Deprecate`PhpDumper` options`inline_factories_parameter` and`inline_class_loader_parameter`
9+
* Add`RemoveBuildParametersPass`, which removes parameters starting with a dot during compilation
10+
411
6.2
512
---
613

‎src/Symfony/Component/DependencyInjection/Compiler/PassConfig.php‎

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,15 @@ public function __construct()
9090
newDefinitionErrorExceptionPass(),
9191
]];
9292

93-
$this->afterRemovingPasses = [[
94-
newResolveHotPathPass(),
95-
newResolveNoPreloadPass(),
96-
newAliasDeprecatedPublicServicesPass(),
97-
]];
93+
$this->afterRemovingPasses = [
94+
0 => [
95+
newResolveHotPathPass(),
96+
newResolveNoPreloadPass(),
97+
newAliasDeprecatedPublicServicesPass(),
98+
],
99+
// Let build parameters be available as late as possible
100+
-2048 => [newRemoveBuildParametersPass()],
101+
];
98102
}
99103

100104
/**
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespaceSymfony\Component\DependencyInjection\Compiler;
13+
14+
useSymfony\Component\DependencyInjection\ContainerBuilder;
15+
16+
class RemoveBuildParametersPassimplements CompilerPassInterface
17+
{
18+
/**
19+
* @var array<string, mixed>
20+
*/
21+
privatearray$removedParameters = [];
22+
23+
publicfunctionprocess(ContainerBuilder$container)
24+
{
25+
$parameterBag =$container->getParameterBag();
26+
$this->removedParameters = [];
27+
28+
foreach ($parameterBag->all()as$name =>$value) {
29+
if ('.' === ($name[0] ??'')) {
30+
$this->removedParameters[$name] =$value;
31+
32+
$parameterBag->remove($name);
33+
$container->log($this,sprintf('Removing build parameter "%s".',$name));
34+
}
35+
}
36+
}
37+
38+
/**
39+
* @return array<string, mixed>
40+
*/
41+
publicfunctiongetRemovedParameters():array
42+
{
43+
return$this->removedParameters;
44+
}
45+
}

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

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,10 @@ public function dump(array $options = []): string|array
137137
'debug' =>true,
138138
'hot_path_tag' =>'container.hot_path',
139139
'preload_tags' => ['container.preload','container.no_preload'],
140-
'inline_factories_parameter' =>'container.dumper.inline_factories',
141-
'inline_class_loader_parameter' =>'container.dumper.inline_class_loader',
140+
'inline_factories_parameter' =>'container.dumper.inline_factories',// @deprecated since Symfony 6.3
141+
'inline_class_loader_parameter' =>'container.dumper.inline_class_loader',// @deprecated since Symfony 6.3
142+
'inline_factories' =>null,
143+
'inline_class_loader' =>null,
142144
'preload_classes' => [],
143145
'service_locator_tag' =>'container.service_locator',
144146
'build_time' =>time(),
@@ -149,8 +151,28 @@ public function dump(array $options = []): string|array
149151
$this->asFiles =$options['as_files'];
150152
$this->hotPathTag =$options['hot_path_tag'];
151153
$this->preloadTags =$options['preload_tags'];
152-
$this->inlineFactories =$this->asFiles &&$options['inline_factories_parameter'] &&$this->container->hasParameter($options['inline_factories_parameter']) &&$this->container->getParameter($options['inline_factories_parameter']);
153-
$this->inlineRequires =$options['inline_class_loader_parameter'] && ($this->container->hasParameter($options['inline_class_loader_parameter']) ?$this->container->getParameter($options['inline_class_loader_parameter']) :$options['debug']);
154+
155+
$this->inlineFactories =false;
156+
if (isset($options['inline_factories'])) {
157+
$this->inlineFactories =$this->asFiles &&$options['inline_factories'];
158+
}elseif (!$options['inline_factories_parameter']) {
159+
trigger_deprecation('symfony/dependency-injection','6.3','Option "inline_factories_parameter" passed to "%s()" is deprecated, use option "inline_factories" instead.',__METHOD__);
160+
}elseif ($this->container->hasParameter($options['inline_factories_parameter'])) {
161+
trigger_deprecation('symfony/dependency-injection','6.3','Option "inline_factories_parameter" passed to "%s()" is deprecated, use option "inline_factories" instead.',__METHOD__);
162+
$this->inlineFactories =$this->asFiles &&$this->container->getParameter($options['inline_factories_parameter']);
163+
}
164+
165+
$this->inlineRequires =$options['debug'];
166+
if (isset($options['inline_class_loader'])) {
167+
$this->inlineRequires =$options['inline_class_loader'];
168+
}elseif (!$options['inline_class_loader_parameter']) {
169+
trigger_deprecation('symfony/dependency-injection','6.3','Option "inline_class_loader_parameter" passed to "%s()" is deprecated, use option "inline_class_loader" instead.',__METHOD__);
170+
$this->inlineRequires =false;
171+
}elseif ($this->container->hasParameter($options['inline_class_loader_parameter'])) {
172+
trigger_deprecation('symfony/dependency-injection','6.3','Option "inline_class_loader_parameter" passed to "%s()" is deprecated, use option "inline_class_loader" instead.',__METHOD__);
173+
$this->inlineRequires =$this->container->getParameter($options['inline_class_loader_parameter']);
174+
}
175+
154176
$this->serviceLocatorTag =$options['service_locator_tag'];
155177
$this->class =$options['class'];
156178

‎src/Symfony/Component/DependencyInjection/Exception/ParameterNotFoundException.php‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ public function updateRepr()
5353
$this->message =sprintf('The service "%s" has a dependency on a non-existent parameter "%s".',$this->sourceId,$this->key);
5454
}elseif (null !==$this->sourceKey) {
5555
$this->message =sprintf('The parameter "%s" has a dependency on a non-existent parameter "%s".',$this->sourceKey,$this->key);
56+
}elseif ('.' === ($this->key[0] ??'')) {
57+
$this->message =sprintf('Parameter "%s" not found. It was probably deleted during the compilation of the container.',$this->key);
5658
}else {
5759
$this->message =sprintf('You have requested a non-existent parameter "%s".',$this->key);
5860
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespaceSymfony\Component\DependencyInjection\Tests\Compiler;
13+
14+
usePHPUnit\Framework\TestCase;
15+
useSymfony\Component\DependencyInjection\Compiler\RemoveBuildParametersPass;
16+
useSymfony\Component\DependencyInjection\ContainerBuilder;
17+
18+
class RemoveBuildParametersPassTestextends TestCase
19+
{
20+
publicfunctiontestBuildParametersShouldBeRemoved()
21+
{
22+
$builder =newContainerBuilder();
23+
$builder->setParameter('foo','Foo');
24+
$builder->setParameter('.bar','Bar');
25+
26+
$pass =newRemoveBuildParametersPass();
27+
$pass->process($builder);
28+
29+
$this->assertSame('Foo',$builder->getParameter('foo'),'"foo" parameter must be defined.');
30+
$this->assertFalse($builder->hasParameter('.bar'),'".bar" parameter must be removed.');
31+
$this->assertSame(['.bar' =>'Bar'],$pass->getRemovedParameters(),'".baz" parameter must be returned with its value.');
32+
}
33+
}

‎src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php‎

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ public function testDumpAsFiles()
222222
->addError('No-no-no-no');
223223
$container->compile();
224224
$dumper =newPhpDumper($container);
225-
$dump =print_r($dumper->dump(['as_files' =>true,'file' =>__DIR__,'hot_path_tag' =>'hot','inline_factories_parameter' =>false,'inline_class_loader_parameter' =>false]),true);
225+
$dump =print_r($dumper->dump(['as_files' =>true,'file' =>__DIR__,'hot_path_tag' =>'hot','inline_factories' =>false,'inline_class_loader' =>false]),true);
226226
if ('\\' === \DIRECTORY_SEPARATOR) {
227227
$dump =str_replace("'.\\DIRECTORY_SEPARATOR.'",'/',$dump);
228228
}
@@ -241,7 +241,7 @@ public function testDumpAsFilesWithTypedReference()
241241
->setPublic(true);
242242
$container->compile();
243243
$dumper =newPhpDumper($container);
244-
$dump =print_r($dumper->dump(['as_files' =>true,'file' =>__DIR__,'hot_path_tag' =>'hot','inline_factories_parameter' =>false,'inline_class_loader_parameter' =>false]),true);
244+
$dump =print_r($dumper->dump(['as_files' =>true,'file' =>__DIR__,'hot_path_tag' =>'hot','inline_factories' =>false,'inline_class_loader' =>false]),true);
245245
if ('\\' === \DIRECTORY_SEPARATOR) {
246246
$dump =str_replace("'.\\DIRECTORY_SEPARATOR.'",'/',$dump);
247247
}
@@ -252,8 +252,6 @@ public function testDumpAsFilesWithTypedReference()
252252
publicfunctiontestDumpAsFilesWithFactoriesInlined()
253253
{
254254
$container =includeself::$fixturesPath.'/containers/container9.php';
255-
$container->setParameter('container.dumper.inline_factories',true);
256-
$container->setParameter('container.dumper.inline_class_loader',true);
257255

258256
$container->getDefinition('bar')->addTag('hot');
259257
$container->register('non_shared_foo', \Bar\FooClass::class)
@@ -268,7 +266,7 @@ public function testDumpAsFilesWithFactoriesInlined()
268266
$container->compile();
269267

270268
$dumper =newPhpDumper($container);
271-
$dump =print_r($dumper->dump(['as_files' =>true,'file' =>__DIR__,'hot_path_tag' =>'hot','build_time' =>1563381341]),true);
269+
$dump =print_r($dumper->dump(['as_files' =>true,'file' =>__DIR__,'hot_path_tag' =>'hot','build_time' =>1563381341,'inline_factories' =>true,'inline_class_loader' =>true]),true);
272270

273271
if ('\\' === \DIRECTORY_SEPARATOR) {
274272
$dump =str_replace("'.\\DIRECTORY_SEPARATOR.'",'/',$dump);
@@ -279,8 +277,6 @@ public function testDumpAsFilesWithFactoriesInlined()
279277
publicfunctiontestDumpAsFilesWithLazyFactoriesInlined()
280278
{
281279
$container =newContainerBuilder();
282-
$container->setParameter('container.dumper.inline_factories',true);
283-
$container->setParameter('container.dumper.inline_class_loader',true);
284280
$container->setParameter('lazy_foo_class', \Bar\FooClass::class);
285281

286282
$container->register('lazy_foo','%lazy_foo_class%')
@@ -292,7 +288,7 @@ public function testDumpAsFilesWithLazyFactoriesInlined()
292288
$container->compile();
293289

294290
$dumper =newPhpDumper($container);
295-
$dump =print_r($dumper->dump(['as_files' =>true,'file' =>__DIR__,'hot_path_tag' =>'hot','build_time' =>1563381341]),true);
291+
$dump =print_r($dumper->dump(['as_files' =>true,'file' =>__DIR__,'hot_path_tag' =>'hot','build_time' =>1563381341,'inline_factories' =>true,'inline_class_loader' =>true]),true);
296292

297293
if ('\\' === \DIRECTORY_SEPARATOR) {
298294
$dump =str_replace("'.\\DIRECTORY_SEPARATOR.'",'/',$dump);
@@ -310,7 +306,7 @@ public function testNonSharedLazyDumpAsFiles()
310306
->setLazy(true);
311307
$container->compile();
312308
$dumper =newPhpDumper($container);
313-
$dump =print_r($dumper->dump(['as_files' =>true,'file' =>__DIR__,'inline_factories_parameter' =>false,'inline_class_loader_parameter' =>false]),true);
309+
$dump =print_r($dumper->dump(['as_files' =>true,'file' =>__DIR__,'inline_factories' =>false,'inline_class_loader' =>false]),true);
314310

315311
if ('\\' === \DIRECTORY_SEPARATOR) {
316312
$dump =str_replace("'.\\DIRECTORY_SEPARATOR.'",'/',$dump);
@@ -473,7 +469,7 @@ public function testEnvParameter()
473469
$container->compile();
474470
$dumper =newPhpDumper($container);
475471

476-
$this->assertStringEqualsFile(self::$fixturesPath.'/php/services26.php',$dumper->dump(['class' =>'Symfony_DI_PhpDumper_Test_EnvParameters','file' =>self::$fixturesPath.'/php/services26.php','inline_factories_parameter' =>false,'inline_class_loader_parameter' =>false]));
472+
$this->assertStringEqualsFile(self::$fixturesPath.'/php/services26.php',$dumper->dump(['class' =>'Symfony_DI_PhpDumper_Test_EnvParameters','file' =>self::$fixturesPath.'/php/services26.php','inline_factories' =>false,'inline_class_loader' =>false]));
477473

478474
requireself::$fixturesPath.'/php/services26.php';
479475
$container =new \Symfony_DI_PhpDumper_Test_EnvParameters();
@@ -994,7 +990,7 @@ public function testArrayParameters()
994990

995991
$dumper =newPhpDumper($container);
996992

997-
$this->assertStringEqualsFile(self::$fixturesPath.'/php/services_array_params.php',str_replace("'.\\DIRECTORY_SEPARATOR.'",'/',$dumper->dump(['file' =>self::$fixturesPath.'/php/services_array_params.php','inline_factories_parameter' =>false,'inline_class_loader_parameter' =>false])));
993+
$this->assertStringEqualsFile(self::$fixturesPath.'/php/services_array_params.php',str_replace("'.\\DIRECTORY_SEPARATOR.'",'/',$dumper->dump(['file' =>self::$fixturesPath.'/php/services_array_params.php','inline_factories' =>false,'inline_class_loader' =>false])));
998994
}
999995

1000996
publicfunctiontestExpressionReferencingPrivateService()
@@ -1162,11 +1158,10 @@ public function testInlineSelfRef()
11621158
publicfunctiontestHotPathOptimizations()
11631159
{
11641160
$container =includeself::$fixturesPath.'/containers/container_inline_requires.php';
1165-
$container->setParameter('inline_requires',true);
11661161
$container->compile();
11671162
$dumper =newPhpDumper($container);
11681163

1169-
$dump =$dumper->dump(['hot_path_tag' =>'container.hot_path','inline_class_loader_parameter' =>'inline_requires','file' =>self::$fixturesPath.'/php/services_inline_requires.php']);
1164+
$dump =$dumper->dump(['hot_path_tag' =>'container.hot_path','inline_class_loader' =>true,'file' =>self::$fixturesPath.'/php/services_inline_requires.php']);
11701165
if ('\\' === \DIRECTORY_SEPARATOR) {
11711166
$dump =str_replace("'.\\DIRECTORY_SEPARATOR.'",'/',$dump);
11721167
}
@@ -1199,13 +1194,12 @@ public function testDumpHandlesObjectClassNames()
11991194
newReference('foo'),
12001195
]))->setPublic(true);
12011196

1202-
$container->setParameter('inline_requires',true);
12031197
$container->compile();
12041198

12051199
$dumper =newPhpDumper($container);
12061200
eval('?>'.$dumper->dump([
12071201
'class' =>'Symfony_DI_PhpDumper_Test_Object_Class_Name',
1208-
'inline_class_loader_parameter' =>'inline_requires',
1202+
'inline_class_loader' =>true,
12091203
]));
12101204

12111205
$container =new \Symfony_DI_PhpDumper_Test_Object_Class_Name();
@@ -1281,7 +1275,6 @@ public function testUninitializedSyntheticReference()
12811275
$dumper =newPhpDumper($container);
12821276
eval('?>'.$dumper->dump([
12831277
'class' =>'Symfony_DI_PhpDumper_Test_UninitializedSyntheticReference',
1284-
'inline_class_loader_parameter' =>'inline_requires',
12851278
]));
12861279

12871280
$container =new \Symfony_DI_PhpDumper_Test_UninitializedSyntheticReference();

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_inlined_factories.txt‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -557,8 +557,6 @@ class ProjectServiceContainer extends Container
557557
'baz_class' => 'BazClass',
558558
'foo_class' => 'Bar\\FooClass',
559559
'foo' => 'bar',
560-
'container.dumper.inline_factories' => true,
561-
'container.dumper.inline_class_loader' => true,
562560
];
563561
}
564562
}

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_lazy_inlined_factories.txt‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,6 @@ class ProjectServiceContainer extends Container
143143
protected function getDefaultParameters(): array
144144
{
145145
return [
146-
'container.dumper.inline_factories' => true,
147-
'container.dumper.inline_class_loader' => true,
148146
'lazy_foo_class' => 'Bar\\FooClass',
149147
];
150148
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp