diff --git a/UPGRADE-4.4.md b/UPGRADE-4.4.md index 6a2eaea10d32..3c04fc45bed3 100644 --- a/UPGRADE-4.4.md +++ b/UPGRADE-4.4.md @@ -72,6 +72,8 @@ DoctrineBridge * Deprecated passing an `IdReader` to the `DoctrineChoiceLoader` when the query cannot be optimized with single id field. * Deprecated not passing an `IdReader` to the `DoctrineChoiceLoader` when the query can be optimized with single id field. * Deprecated `RegistryInterface`, use `Doctrine\Common\Persistence\ManagerRegistry`. + * Added a new `getMetadataDriverClass` method to replace class parameters in `AbstractDoctrineExtension`. This method + will be abstract in Symfony 5 and must be declared in extending classes. Filesystem ---------- diff --git a/UPGRADE-5.0.md b/UPGRADE-5.0.md index 25749c546ba8..94ec159545e7 100644 --- a/UPGRADE-5.0.md +++ b/UPGRADE-5.0.md @@ -122,6 +122,7 @@ DoctrineBridge * Passing an `IdReader` to the `DoctrineChoiceLoader` when the query cannot be optimized with single id field will throw an exception, pass `null` instead * Not passing an `IdReader` to the `DoctrineChoiceLoader` when the query can be optimized with single id field will not apply any optimization * The `RegistryInterface` has been removed. + * Added a new `getMetadataDriverClass` method in `AbstractDoctrineExtension` to replace class parameters. DomCrawler ---------- diff --git a/src/Symfony/Bridge/Doctrine/CHANGELOG.md b/src/Symfony/Bridge/Doctrine/CHANGELOG.md index 434446c99266..8265e9e68270 100644 --- a/src/Symfony/Bridge/Doctrine/CHANGELOG.md +++ b/src/Symfony/Bridge/Doctrine/CHANGELOG.md @@ -7,6 +7,7 @@ CHANGELOG * added `DoctrineClearEntityManagerMiddleware` * deprecated `RegistryInterface`, use `Doctrine\Common\Persistence\ManagerRegistry` * added support for invokable event listeners + * added `getMetadataDriverClass` method to deprecate class parameters in service configuration files 4.3.0 ----- diff --git a/src/Symfony/Bridge/Doctrine/DependencyInjection/AbstractDoctrineExtension.php b/src/Symfony/Bridge/Doctrine/DependencyInjection/AbstractDoctrineExtension.php index 61c6609c764f..dc80ff76fef0 100644 --- a/src/Symfony/Bridge/Doctrine/DependencyInjection/AbstractDoctrineExtension.php +++ b/src/Symfony/Bridge/Doctrine/DependencyInjection/AbstractDoctrineExtension.php @@ -178,7 +178,7 @@ protected function registerMappingDrivers($objectManager, ContainerBuilder $cont if ($container->hasDefinition($this->getObjectManagerElementName($objectManager['name'].'_metadata_driver'))) { $chainDriverDef = $container->getDefinition($this->getObjectManagerElementName($objectManager['name'].'_metadata_driver')); } else { - $chainDriverDef = new Definition('%'.$this->getObjectManagerElementName('metadata.driver_chain.class%')); + $chainDriverDef = new Definition($this->getMetadataDriverClass('driver_chain')); $chainDriverDef->setPublic(false); } @@ -194,12 +194,12 @@ protected function registerMappingDrivers($objectManager, ContainerBuilder $cont } $mappingDriverDef->setArguments($args); } elseif ('annotation' == $driverType) { - $mappingDriverDef = new Definition('%'.$this->getObjectManagerElementName('metadata.'.$driverType.'.class%'), [ + $mappingDriverDef = new Definition($this->getMetadataDriverClass($driverType), [ new Reference($this->getObjectManagerElementName('metadata.annotation_reader')), array_values($driverPaths), ]); } else { - $mappingDriverDef = new Definition('%'.$this->getObjectManagerElementName('metadata.'.$driverType.'.class%'), [ + $mappingDriverDef = new Definition($this->getMetadataDriverClass($driverType), [ array_values($driverPaths), ]); } @@ -434,6 +434,16 @@ abstract protected function getMappingResourceConfigDirectory(); */ abstract protected function getMappingResourceExtension(); + /** + * The class name used by the various mapping drivers. + */ + protected function getMetadataDriverClass(string $driverType): string + { + @trigger_error(sprintf('Not declaring the "%s" method in class "%s" is deprecated since Symfony 4.4. This method will be abstract in Symfony 5.0.', __METHOD__, static::class), E_USER_DEPRECATED); + + return '%'.$this->getObjectManagerElementName('metadata.'.$driverType.'.class%'); + } + /** * Search for a manager that is declared as 'auto_mapping' = true. *