diff --git a/src/Bundle/DependencyInjection/DunglasDoctrineJsonOdmExtension.php b/src/Bundle/DependencyInjection/DunglasDoctrineJsonOdmExtension.php index 6af6586..ecf1298 100644 --- a/src/Bundle/DependencyInjection/DunglasDoctrineJsonOdmExtension.php +++ b/src/Bundle/DependencyInjection/DunglasDoctrineJsonOdmExtension.php @@ -13,7 +13,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Extension\Extension; use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; -use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; +use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; use Symfony\Component\Serializer\Normalizer\BackedEnumNormalizer; use Symfony\Component\Serializer\Normalizer\UidNormalizer; @@ -45,8 +45,8 @@ public function prepend(ContainerBuilder $container): void */ public function load(array $configs, ContainerBuilder $container): void { - $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); - $loader->load('services.xml'); + $loader = new PhpFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('services.php'); if (PHP_VERSION_ID < 80100 || !class_exists(BackedEnumNormalizer::class)) { $container->removeDefinition('dunglas_doctrine_json_odm.normalizer.backed_enum'); diff --git a/src/Bundle/Resources/config/services.php b/src/Bundle/Resources/config/services.php new file mode 100644 index 0000000..39c8f65 --- /dev/null +++ b/src/Bundle/Resources/config/services.php @@ -0,0 +1,63 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Symfony\Component\DependencyInjection\Loader\Configurator; + +use Dunglas\DoctrineJsonOdm\Serializer; +use Dunglas\DoctrineJsonOdm\TypeMapper; +use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer; +use Symfony\Component\Serializer\Normalizer\BackedEnumNormalizer; +use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer; +use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; +use Symfony\Component\Serializer\Normalizer\UidNormalizer; + +return static function (ContainerConfigurator $container) { + $services = $container->services(); + + $services->set('dunglas_doctrine_json_odm.normalizer.backed_enum', BackedEnumNormalizer::class) + ->private(); + + $services->set('dunglas_doctrine_json_odm.normalizer.uid', UidNormalizer::class) + ->private(); + + $services->set('dunglas_doctrine_json_odm.normalizer.datetime', DateTimeNormalizer::class) + ->private(); + + $services->set('dunglas_doctrine_json_odm.normalizer.array', ArrayDenormalizer::class) + ->private(); + + $services->set('dunglas_doctrine_json_odm.type_mapper', TypeMapper::class) + ->private(); + + $services->set('dunglas_doctrine_json_odm.normalizer.object', ObjectNormalizer::class) + ->private() + ->args([ + service('serializer.mapping.class_metadata_factory')->ignoreOnInvalid(), + null, + service('serializer.property_accessor'), + service('property_info')->ignoreOnInvalid(), + service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(), + ]); + + $services->set('dunglas_doctrine_json_odm.serializer', Serializer::class) + ->public() + ->args([ + [ + service('dunglas_doctrine_json_odm.normalizer.backed_enum')->ignoreOnInvalid(), + service('dunglas_doctrine_json_odm.normalizer.uid')->ignoreOnInvalid(), + service('dunglas_doctrine_json_odm.normalizer.datetime'), + service('dunglas_doctrine_json_odm.normalizer.array'), + service('dunglas_doctrine_json_odm.normalizer.object'), + ], + [ + service('serializer.encoder.json'), + ], + service('dunglas_doctrine_json_odm.type_mapper')->ignoreOnInvalid(), + ]); +}; diff --git a/src/Bundle/Resources/config/services.xml b/src/Bundle/Resources/config/services.xml deleted file mode 100644 index 5cbe5dc..0000000 --- a/src/Bundle/Resources/config/services.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - null - - - - - - - - - - - - - - - - - - - - - -