Skip to content

Commit 27c31c3

Browse files
committed
Wire up type aliases support in EntityValueResolver
This is an addendum to PR symfony/symfony#51765 in the Symfony Doctrine Bridge, which adds type alias support to EntityValueResolver. This code injects the doctrine.orm.resolve_target_entities configuration into the EntityValueResolver class.
1 parent aac7562 commit 27c31c3

File tree

3 files changed

+40
-15
lines changed

3 files changed

+40
-15
lines changed

src/DependencyInjection/DoctrineExtension.php

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -549,19 +549,22 @@ protected function ormLoad(array $config, ContainerBuilder $container)
549549
$controllerResolverDefaults['evict_cache'] = true;
550550
}
551551

552-
if ($controllerResolverDefaults) {
553-
$container->getDefinition('doctrine.orm.entity_value_resolver')->setArgument(2, (new Definition(MapEntity::class))->setArguments([
554-
null,
555-
null,
556-
null,
557-
$controllerResolverDefaults['mapping'] ?? null,
558-
null,
559-
null,
560-
null,
561-
$controllerResolverDefaults['evict_cache'] ?? null,
562-
$controllerResolverDefaults['disabled'] ?? false,
563-
]));
564-
}
552+
$valueResolverDefinition = $container->getDefinition('doctrine.orm.entity_value_resolver');
553+
554+
$valueResolverDefinition->setArgument(2, (new Definition(MapEntity::class))->setArguments([
555+
null,
556+
null,
557+
null,
558+
$controllerResolverDefaults['mapping'] ?? null,
559+
null,
560+
null,
561+
null,
562+
$controllerResolverDefaults['evict_cache'] ?? null,
563+
$controllerResolverDefaults['disabled'] ?? false,
564+
]));
565+
566+
// Symfony 7.3 and higher expose type alias support in the EntityValueResolver
567+
$valueResolverDefinition->setArgument(3, $config['resolve_target_entities']);
565568
}
566569

567570
// not available in Doctrine ORM 3.0 and higher

tests/ContainerTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand;
1616
use Doctrine\Persistence\ManagerRegistry;
1717
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
18+
use Symfony\Bridge\Doctrine\ArgumentResolver\EntityValueResolver;
1819
use Symfony\Bridge\Doctrine\CacheWarmer\ProxyCacheWarmer;
1920
use Symfony\Bridge\Doctrine\DataCollector\DoctrineDataCollector;
2021
use Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor;
@@ -23,6 +24,7 @@
2324
use Symfony\Component\Cache\Adapter\ArrayAdapter;
2425
use Symfony\Component\Cache\Adapter\PhpArrayAdapter;
2526

27+
use function class_exists;
2628
use function interface_exists;
2729

2830
class ContainerTest extends TestCase
@@ -39,6 +41,10 @@ public function testContainer(): void
3941
$this->assertInstanceOf(Reader::class, $container->get('doctrine.orm.metadata.annotation_reader'));
4042
}
4143

44+
if (class_exists(EntityValueResolver::class)) {
45+
$this->assertInstanceOf(EntityValueResolver::class, $container->get('doctrine.orm.entity_value_resolver'));
46+
}
47+
4248
$this->assertInstanceOf(DoctrineDataCollector::class, $container->get('data_collector.doctrine'));
4349
$this->assertInstanceOf(DBALConfiguration::class, $container->get('doctrine.dbal.default_connection.configuration'));
4450
$this->assertInstanceOf(EventManager::class, $container->get('doctrine.dbal.default_connection.event_manager'));

tests/DependencyInjection/DoctrineExtensionTest.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1460,13 +1460,29 @@ public function testControllerResolver(bool $simpleEntityManagerConfig): void
14601460
$config['orm'] = [];
14611461
}
14621462

1463-
$config['orm']['controller_resolver'] = ['auto_mapping' => true];
1463+
$config['orm']['controller_resolver'] = ['auto_mapping' => true];
1464+
$config['orm']['resolve_target_entities'] = ['Throwable' => 'stdClass'];
14641465

14651466
$extension->load([$config], $container);
14661467

14671468
$controllerResolver = $container->getDefinition('doctrine.orm.entity_value_resolver');
14681469

1469-
$this->assertEquals([new Reference('doctrine'), new Reference('doctrine.orm.entity_value_resolver.expression_language', $container::IGNORE_ON_INVALID_REFERENCE)], $controllerResolver->getArguments());
1470+
$this->assertEquals([
1471+
0 => new Reference('doctrine'),
1472+
1 => new Reference('doctrine.orm.entity_value_resolver.expression_language', $container::IGNORE_ON_INVALID_REFERENCE),
1473+
2 => (new Definition(MapEntity::class))->setArguments([
1474+
null,
1475+
null,
1476+
null,
1477+
null,
1478+
null,
1479+
null,
1480+
null,
1481+
null,
1482+
false,
1483+
]),
1484+
3 => ['Throwable' => 'stdClass'],
1485+
], $controllerResolver->getArguments());
14701486

14711487
$container = $this->getContainer();
14721488

0 commit comments

Comments
 (0)