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

Appearance settings

Commit de93ccd

Browse filesBrowse files
Merge branch '7.0' into 7.1
* 7.0: [HttpKernel] Fix deps=low [HttpKernel] Allow tagged controllers in ControllerResolver bugfix php jit issue with ternary operator
2 parents 4471e09 + 27760c5 commit de93ccd
Copy full SHA for de93ccd

File tree

3 files changed

+43
-2
lines changed
Filter options

3 files changed

+43
-2
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php
+8Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterControllerArgumentLocatorsPassTest.php
+24Lines 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/VarExporter/Internal/Hydrator.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/VarExporter/Internal/Hydrator.php
+11-2Lines 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)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.