123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\DependencyInjection\Loader\Configurator;
- use Psr\Cache\CacheItemPoolInterface;
- use Symfony\Bundle\FrameworkBundle\CacheWarmer\SerializerCacheWarmer;
- use Symfony\Component\Cache\Adapter\PhpArrayAdapter;
- use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
- use Symfony\Component\ErrorHandler\ErrorRenderer\SerializerErrorRenderer;
- use Symfony\Component\PropertyInfo\Extractor\SerializerExtractor;
- use Symfony\Component\Serializer\Encoder\CsvEncoder;
- use Symfony\Component\Serializer\Encoder\DecoderInterface;
- use Symfony\Component\Serializer\Encoder\EncoderInterface;
- use Symfony\Component\Serializer\Encoder\JsonEncoder;
- use Symfony\Component\Serializer\Encoder\XmlEncoder;
- use Symfony\Component\Serializer\Encoder\YamlEncoder;
- use Symfony\Component\Serializer\Mapping\ClassDiscriminatorFromClassMetadata;
- use Symfony\Component\Serializer\Mapping\ClassDiscriminatorResolverInterface;
- use Symfony\Component\Serializer\Mapping\Factory\CacheClassMetadataFactory;
- use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory;
- use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface;
- use Symfony\Component\Serializer\Mapping\Loader\LoaderChain;
- use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
- use Symfony\Component\Serializer\NameConverter\MetadataAwareNameConverter;
- use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
- use Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer;
- use Symfony\Component\Serializer\Normalizer\DataUriNormalizer;
- use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer;
- use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
- use Symfony\Component\Serializer\Normalizer\DateTimeZoneNormalizer;
- use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
- use Symfony\Component\Serializer\Normalizer\FormErrorNormalizer;
- use Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer;
- use Symfony\Component\Serializer\Normalizer\MimeMessageNormalizer;
- use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
- use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
- use Symfony\Component\Serializer\Normalizer\ProblemNormalizer;
- use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;
- use Symfony\Component\Serializer\Normalizer\UidNormalizer;
- use Symfony\Component\Serializer\Normalizer\UnwrappingDenormalizer;
- use Symfony\Component\Serializer\Serializer;
- use Symfony\Component\Serializer\SerializerInterface;
- return static function (ContainerConfigurator $container) {
- $container->parameters()
- ->set('serializer.mapping.cache.file', '%kernel.cache_dir%/serialization.php')
- ;
- $container->services()
- ->set('serializer', Serializer::class)
- ->public()
- ->args([[], []])
- ->tag('container.private', ['package' => 'symfony/framework-bundle', 'version' => '5.2'])
- ->alias(SerializerInterface::class, 'serializer')
- ->alias(NormalizerInterface::class, 'serializer')
- ->alias(DenormalizerInterface::class, 'serializer')
- ->alias(EncoderInterface::class, 'serializer')
- ->alias(DecoderInterface::class, 'serializer')
- ->alias('serializer.property_accessor', 'property_accessor')
- // Discriminator Map
- ->set('serializer.mapping.class_discriminator_resolver', ClassDiscriminatorFromClassMetadata::class)
- ->args([service('serializer.mapping.class_metadata_factory')])
- ->alias(ClassDiscriminatorResolverInterface::class, 'serializer.mapping.class_discriminator_resolver')
- // Normalizer
- ->set('serializer.normalizer.constraint_violation_list', ConstraintViolationListNormalizer::class)
- ->args([[], service('serializer.name_converter.metadata_aware')])
- ->tag('serializer.normalizer', ['priority' => -915])
- ->set('serializer.normalizer.mime_message', MimeMessageNormalizer::class)
- ->args([service('serializer.normalizer.property')])
- ->tag('serializer.normalizer', ['priority' => -915])
- ->set('serializer.normalizer.datetimezone', DateTimeZoneNormalizer::class)
- ->tag('serializer.normalizer', ['priority' => -915])
- ->set('serializer.normalizer.dateinterval', DateIntervalNormalizer::class)
- ->tag('serializer.normalizer', ['priority' => -915])
- ->set('serializer.normalizer.data_uri', DataUriNormalizer::class)
- ->args([service('mime_types')->nullOnInvalid()])
- ->tag('serializer.normalizer', ['priority' => -920])
- ->set('serializer.normalizer.datetime', DateTimeNormalizer::class)
- ->tag('serializer.normalizer', ['priority' => -910])
- ->set('serializer.normalizer.json_serializable', JsonSerializableNormalizer::class)
- ->tag('serializer.normalizer', ['priority' => -900])
- ->set('serializer.normalizer.problem', ProblemNormalizer::class)
- ->args([param('kernel.debug')])
- ->tag('serializer.normalizer', ['priority' => -890])
- ->set('serializer.denormalizer.unwrapping', UnwrappingDenormalizer::class)
- ->args([service('serializer.property_accessor')])
- ->tag('serializer.normalizer', ['priority' => 1000])
- ->set('serializer.normalizer.uid', UidNormalizer::class)
- ->tag('serializer.normalizer', ['priority' => -890])
- ->set('serializer.normalizer.form_error', FormErrorNormalizer::class)
- ->tag('serializer.normalizer', ['priority' => -915])
- ->set('serializer.normalizer.object', ObjectNormalizer::class)
- ->args([
- service('serializer.mapping.class_metadata_factory'),
- service('serializer.name_converter.metadata_aware'),
- service('serializer.property_accessor'),
- service('property_info')->ignoreOnInvalid(),
- service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
- null,
- [],
- ])
- ->tag('serializer.normalizer', ['priority' => -1000])
- ->alias(ObjectNormalizer::class, 'serializer.normalizer.object')
- ->set('serializer.normalizer.property', PropertyNormalizer::class)
- ->args([
- service('serializer.mapping.class_metadata_factory'),
- service('serializer.name_converter.metadata_aware'),
- service('property_info')->ignoreOnInvalid(),
- service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
- null,
- [],
- ])
- ->alias(PropertyNormalizer::class, 'serializer.normalizer.property')
- ->set('serializer.denormalizer.array', ArrayDenormalizer::class)
- ->tag('serializer.normalizer', ['priority' => -990])
- // Loader
- ->set('serializer.mapping.chain_loader', LoaderChain::class)
- ->args([[]])
- // Class Metadata Factory
- ->set('serializer.mapping.class_metadata_factory', ClassMetadataFactory::class)
- ->args([service('serializer.mapping.chain_loader')])
- ->alias(ClassMetadataFactoryInterface::class, 'serializer.mapping.class_metadata_factory')
- // Cache
- ->set('serializer.mapping.cache_warmer', SerializerCacheWarmer::class)
- ->args([abstract_arg('The serializer metadata loaders'), param('serializer.mapping.cache.file')])
- ->tag('kernel.cache_warmer')
- ->set('serializer.mapping.cache.symfony', CacheItemPoolInterface::class)
- ->factory([PhpArrayAdapter::class, 'create'])
- ->args([param('serializer.mapping.cache.file'), service('cache.serializer')])
- ->set('serializer.mapping.cache_class_metadata_factory', CacheClassMetadataFactory::class)
- ->decorate('serializer.mapping.class_metadata_factory')
- ->args([
- service('serializer.mapping.cache_class_metadata_factory.inner'),
- service('serializer.mapping.cache.symfony'),
- ])
- // Encoders
- ->set('serializer.encoder.xml', XmlEncoder::class)
- ->tag('serializer.encoder')
- ->set('serializer.encoder.json', JsonEncoder::class)
- ->tag('serializer.encoder')
- ->set('serializer.encoder.yaml', YamlEncoder::class)
- ->tag('serializer.encoder')
- ->set('serializer.encoder.csv', CsvEncoder::class)
- ->tag('serializer.encoder')
- // Name converter
- ->set('serializer.name_converter.camel_case_to_snake_case', CamelCaseToSnakeCaseNameConverter::class)
- ->set('serializer.name_converter.metadata_aware', MetadataAwareNameConverter::class)
- ->args([service('serializer.mapping.class_metadata_factory')])
- // PropertyInfo extractor
- ->set('property_info.serializer_extractor', SerializerExtractor::class)
- ->args([service('serializer.mapping.class_metadata_factory')])
- ->tag('property_info.list_extractor', ['priority' => -999])
- // ErrorRenderer integration
- ->alias('error_renderer', 'error_renderer.serializer')
- ->alias('error_renderer.serializer', 'error_handler.error_renderer.serializer')
- ->set('error_handler.error_renderer.serializer', SerializerErrorRenderer::class)
- ->args([
- service('serializer'),
- inline_service()
- ->factory([SerializerErrorRenderer::class, 'getPreferredFormat'])
- ->args([service('request_stack')]),
- service('error_renderer.html'),
- inline_service()
- ->factory([HtmlErrorRenderer::class, 'isDebug'])
- ->args([service('request_stack'), param('kernel.debug')]),
- ])
- ;
- };
|