10000 Merge branch '6.4' into 7.0 · symfony/symfony@27760c5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 27760c5

Browse files
Merge branch '6.4' into 7.0
* 6.4: [HttpKernel] Fix deps=low [HttpKernel] Allow tagged controllers in ControllerResolver bugfix php jit issue with ternary operator
2 parents 9425d4f + e711f3e commit 27760c5

File tree

4 files changed

+44
-3
lines changed

4 files changed

+44
-3
lines changed

src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public function process(ContainerBuilder $container): void
4242

4343
$parameterBag = $container->getParameterBag();
4444
$controllers = [];
45+
$controllerClasses = [];
4546

4647
$publicAliases = [];
4748
foreach ($container->getAliases() as $id => $alias) {
@@ -71,6 +72,8 @@ public function process(ContainerBuilder $container): void
7172
throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id));
7273
}
7374

75+
$controllerClasses[] = $class;
76+
7477
// get regular public methods
7578
$methods = [];
7679
$arguments = [];
@@ -224,5 +227,10 @@ public function process(ContainerBuilder $container): void
224227
}
225228

226229
$container->setAlias('argument_resolver.controller_locator', (string) $controllerLocatorRef);
230+
231+
if ($container->hasDefinition('controller_resolver')) {
232+
$container->getDefinition('controller_resolver')
233+
->addMethodCall('allowControllers', [array_unique($controllerClasses)]);
234+
}
227235
}
228236
}

src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,30 @@ public function testTaggedIteratorAndTaggedLocatorAttributes()
557557
$this->assertTrue($argLocator->has('foo'));
558558
$this->assertSame('bar', $argLocator->get('foo'));
559559
}
560+
561+
public function testTaggedControllersAreRegisteredInControllerResolver()
562+
{
563+
$container = new ContainerBuilder();
564+
$container->register('argument_resolver.service')->addArgument([]);
565+
$controllerResolver = $container->register('controller_resolver');
566+
567+
$container->register('foo', RegisterTestController::class)
568+
->addTag('controller.service_arguments')
569+
;
570+
571+
// duplicates should be removed
572+
$container->register('bar', RegisterTestController::class)
573+
->addTag('controller.service_arguments')
574+
;
575+
576+
// services with no tag should be ignored
577+
$container->register('baz', ControllerDummy::class);
578+
579+
$pass = new RegisterControllerArgumentLocatorsPass();
580+
$pass->process($container);
581+
582+
$this->assertSame([['allowControllers', [[RegisterTestController::class]]]], $controllerResolver->getMethodCalls());
583+
}
560584
}
561585

562586
class RegisterTestController

src/Symfony/Component/HttpKernel/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"symfony/process": "^6.4|^7.0",
3838
"symfony/property-access": "^6.4|^7.0",
3939
"symfony/routing": "^6.4|^7.0",
40-
"symfony/serializer": "^6.4|^7.0",
40+
"symfony/serializer": "^6.4.4|^7.0.4",
4141
"symfony/stopwatch": "^6.4|^7.0",
4242
"symfony/translation": "^6.4|^7.0",
4343
"symfony/translation-contracts": "^2.5|^3",

src/Symfony/Component/VarExporter/Internal/Hydrator.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,10 +262,19 @@ public static function getPropertyScopes($class): array
262262
$name = $property->name;
263263

264264
if (\ReflectionProperty::IS_PRIVATE & $flags) {
265-
$propertyScopes["\0$class\0$name"] = $propertyScopes[$name] = [$class, $name, $flags & \ReflectionProperty::IS_READONLY ? $class : null, $property];
265+
$readonlyScope = null;
266+
if ($flags & \ReflectionProperty::IS_READONLY) {
267+
$readonlyScope = $class;
268+
}
269+
$propertyScopes["\0$class\0$name"] = $propertyScopes[$name] = [$class, $name, $readonlyScope, $property];
270+
266271
continue;
267272
}
268-
$propertyScopes[$name] = [$class, $name, $flags & \ReflectionProperty::IS_READONLY ? $property->class : null, $property];
273+
$readonlyScope = null;
274+
if ($flags & \ReflectionProperty::IS_READONLY) {
275+
$readonlyScope = $property->class;
276+
}
277+
$propertyScopes[$name] = [$class, $name, $readonlyScope, $property];
269278

270279
if (\ReflectionProperty::IS_PROTECTED & $flags) {
271280
$propertyScopes["\0*\0$name"] = $propertyScopes[$name];

0 commit comments

Comments
 (0)
0