use the configured context factory to create the serialization context

This commit is contained in:
Asmir Mustafic 2022-08-22 20:44:17 +02:00
parent 3d38bba7cd
commit 883049a9e0
2 changed files with 10 additions and 2 deletions

View File

@ -12,6 +12,7 @@
namespace Nelmio\ApiDocBundle\DependencyInjection;
use FOS\RestBundle\Controller\Annotations\ParamInterface;
use JMS\Serializer\ContextFactory\SerializationContextFactoryInterface;
use JMS\Serializer\Visitor\SerializationVisitorInterface;
use Nelmio\ApiDocBundle\ApiDocGenerator;
use Nelmio\ApiDocBundle\Describer\ExternalDocDescriber;
@ -169,6 +170,7 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI
// JMS metadata support
if ($config['models']['use_jms']) {
$jmsNamingStrategy = interface_exists(SerializationVisitorInterface::class) ? null : new Reference('jms_serializer.naming_strategy');
$contextFactory = interface_exists(SerializationContextFactoryInterface::class) ? new Reference('jms_serializer.serialization_context_factory') : null;
$container->register('nelmio_api_doc.model_describers.jms', JMSModelDescriber::class)
->setPublic(false)
@ -178,6 +180,7 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI
$config['media_types'],
$jmsNamingStrategy,
$container->getParameter('nelmio_api_doc.use_validation_groups'),
$contextFactory,
])
->addTag('nelmio_api_doc.model_describer', ['priority' => 50]);

View File

@ -13,6 +13,7 @@ namespace Nelmio\ApiDocBundle\ModelDescriber;
use Doctrine\Common\Annotations\Reader;
use JMS\Serializer\Context;
use JMS\Serializer\ContextFactory\SerializationContextFactoryInterface;
use JMS\Serializer\Exclusion\GroupsExclusionStrategy;
use JMS\Serializer\Naming\PropertyNamingStrategyInterface;
use JMS\Serializer\SerializationContext;
@ -35,6 +36,8 @@ class JMSModelDescriber implements ModelDescriberInterface, ModelRegistryAwareIn
private $factory;
private $contextFactory;
private $namingStrategy;
private $doctrineReader;
@ -60,13 +63,15 @@ class JMSModelDescriber implements ModelDescriberInterface, ModelRegistryAwareIn
Reader $reader,
array $mediaTypes,
?PropertyNamingStrategyInterface $namingStrategy = null,
bool $useValidationGroups = false
bool $useValidationGroups = false,
?SerializationContextFactoryInterface $contextFactory = null
) {
$this->factory = $factory;
$this->namingStrategy = $namingStrategy;
$this->doctrineReader = $reader;
$this->mediaTypes = $mediaTypes;
$this->useValidationGroups = $useValidationGroups;
$this->contextFactory = $contextFactory;
}
/**
@ -187,7 +192,7 @@ class JMSModelDescriber implements ModelDescriberInterface, ModelRegistryAwareIn
$stack->unshift($metadataCopy);
}
} else {
$context = SerializationContext::create();
$context = $this->contextFactory ? $this->contextFactory->createSerializationContext() : SerializationContext::create();
if (null !== $model->getGroups()) {
$context->addExclusionStrategy(new GroupsExclusionStrategy($model->getGroups()));