From 66bcf029035d6e868f475d34c6b16ee430df6cec Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Sun, 11 Nov 2018 16:12:15 +0100 Subject: [PATCH] when the naming strategy is not available, we are using jms/serializer 2.0 --- DependencyInjection/NelmioApiDocExtension.php | 6 +++++- ModelDescriber/JMSModelDescriber.php | 9 +++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 0bcb69d..7ddd0ce 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -12,6 +12,7 @@ namespace Nelmio\ApiDocBundle\DependencyInjection; use FOS\RestBundle\Controller\Annotations\ParamInterface; +use JMS\Serializer\Visitor\SerializationVisitorInterface; use Nelmio\ApiDocBundle\ApiDocGenerator; use Nelmio\ApiDocBundle\Describer\ExternalDocDescriber; use Nelmio\ApiDocBundle\Describer\RouteDescriber; @@ -22,6 +23,7 @@ use Nelmio\ApiDocBundle\Routing\FilteredRouteCollectionBuilder; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; @@ -141,11 +143,13 @@ 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'); + $container->register('nelmio_api_doc.model_describers.jms', JMSModelDescriber::class) ->setPublic(false) ->setArguments([ new Reference('jms_serializer.metadata_factory'), - new Reference('jms_serializer.naming_strategy'), + $jmsNamingStrategy, new Reference('annotation_reader'), ]) ->addTag('nelmio_api_doc.model_describer', ['priority' => 50]); diff --git a/ModelDescriber/JMSModelDescriber.php b/ModelDescriber/JMSModelDescriber.php index c9d4488..518023d 100644 --- a/ModelDescriber/JMSModelDescriber.php +++ b/ModelDescriber/JMSModelDescriber.php @@ -42,7 +42,7 @@ class JMSModelDescriber implements ModelDescriberInterface, ModelRegistryAwareIn public function __construct( MetadataFactoryInterface $factory, - PropertyNamingStrategyInterface $namingStrategy, + PropertyNamingStrategyInterface $namingStrategy = null, Reader $reader ) { $this->factory = $factory; @@ -81,8 +81,9 @@ class JMSModelDescriber implements ModelDescriberInterface, ModelRegistryAwareIn $previousGroups = $groups; $groups = $groups[$item->name]; } elseif (!isset($groups[$item->name]) && !empty($this->previousGroups[$model->getHash()])) { - // $groups = $this->previousGroups[spl_object_hash($model)]; use this for jms/serializer 2.0 - $groups = false === $this->propertyTypeUsesGroups($item->type) ? null : [GroupsExclusionStrategy::DEFAULT_GROUP]; + $groups = false === $this->propertyTypeUsesGroups($item->type) + ? null + : ($this->namingStrategy ? [GroupsExclusionStrategy::DEFAULT_GROUP] : $this->previousGroups[$model->getHash()]); } elseif (is_array($groups)) { $groups = array_filter($groups, 'is_scalar'); } @@ -91,7 +92,7 @@ class JMSModelDescriber implements ModelDescriberInterface, ModelRegistryAwareIn $groups = null; } - $name = $this->namingStrategy->translateName($item); + $name = $this->namingStrategy ? $this->namingStrategy->translateName($item) : $item->serializedName; // read property options from Swagger Property annotation if it exists if (null !== $item->reflection) { $property = $properties->get($annotationsReader->getPropertyName($item->reflection, $name));