Skip to content

Commit 18f1ca0

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 9926a4a commit 18f1ca0

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

src/DependencyInjection/DoctrineExtension.php

+8-1
Original file line numberDiff line numberDiff line change
@@ -541,8 +541,10 @@ protected function ormLoad(array $config, ContainerBuilder $container)
541541
$controllerResolverDefaults['evict_cache'] = true;
542542
}
543543

544+
$valueResolverDefinition = $container->getDefinition('doctrine.orm.entity_value_resolver');
545+
544546
if ($controllerResolverDefaults) {
545-
$container->getDefinition('doctrine.orm.entity_value_resolver')->setArgument(2, (new Definition(MapEntity::class))->setArguments([
547+
$valueResolverDefinition->setArgument(2, (new Definition(MapEntity::class))->setArguments([
546548
null,
547549
null,
548550
null,
@@ -553,7 +555,12 @@ protected function ormLoad(array $config, ContainerBuilder $container)
553555
$controllerResolverDefaults['evict_cache'] ?? null,
554556
$controllerResolverDefaults['disabled'] ?? false,
555557
]));
558+
} else {
559+
$valueResolverDefinition->setArgument(2, (new Definition(MapEntity::class)));
556560
}
561+
562+
// Symfony 7.2 and higher expose type alias support in the EntityValueResolver
563+
$valueResolverDefinition->setArgument(3, $config['resolve_target_entities']);
557564
}
558565

559566
// not available in Doctrine ORM 3.0 and higher

tests/ContainerTest.php

+6
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

+8-2
Original file line numberDiff line numberDiff line change
@@ -1497,13 +1497,19 @@ public function testControllerResolver(bool $simpleEntityManagerConfig): void
14971497
$config['orm'] = [];
14981498
}
14991499

1500-
$config['orm']['controller_resolver'] = ['auto_mapping' => true];
1500+
$config['orm']['controller_resolver'] = ['auto_mapping' => true];
1501+
$config['orm']['resolve_target_entities'] = ['Throwable' => 'stdClass'];
15011502

15021503
$extension->load([$config], $container);
15031504

15041505
$controllerResolver = $container->getDefinition('doctrine.orm.entity_value_resolver');
15051506

1506-
$this->assertEquals([new Reference('doctrine'), new Reference('doctrine.orm.entity_value_resolver.expression_language', $container::IGNORE_ON_INVALID_REFERENCE)], $controllerResolver->getArguments());
1507+
$this->assertEquals([
1508+
0 => new Reference('doctrine'),
1509+
1 => new Reference('doctrine.orm.entity_value_resolver.expression_language', $container::IGNORE_ON_INVALID_REFERENCE),
1510+
2 => new Definition(MapEntity::class),
1511+
3 => ['Throwable' => 'stdClass'],
1512+
], $controllerResolver->getArguments());
15071513

15081514
$container = $this->getContainer();
15091515

0 commit comments

Comments
 (0)