Merge pull request #2039 from nelmio/GuilhemN-patch-1

Make ClassMetadataFactory optional
This commit is contained in:
Guilhem Niot 2022-09-28 22:10:51 +02:00 committed by GitHub
commit b42ac43beb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 10 deletions

View File

@ -144,7 +144,7 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI
)); ));
$container->getDefinition('nelmio_api_doc.model_describers.object') $container->getDefinition('nelmio_api_doc.model_describers.object')
->setArgument(4, $config['media_types']); ->setArgument(3, $config['media_types']);
// Add autoconfiguration for model describer // Add autoconfiguration for model describer
$container->registerForAutoconfiguration(ModelDescriberInterface::class) $container->registerForAutoconfiguration(ModelDescriberInterface::class)

View File

@ -33,7 +33,7 @@ class ObjectModelDescriber implements ModelDescriberInterface, ModelRegistryAwar
/** @var PropertyInfoExtractorInterface */ /** @var PropertyInfoExtractorInterface */
private $propertyInfo; private $propertyInfo;
/** @var ClassMetadataFactoryInterface */ /** @var ClassMetadataFactoryInterface|null */
private $classMetadataFactory; private $classMetadataFactory;
/** @var Reader */ /** @var Reader */
private $doctrineReader; private $doctrineReader;
@ -41,27 +41,27 @@ class ObjectModelDescriber implements ModelDescriberInterface, ModelRegistryAwar
private $propertyDescribers; private $propertyDescribers;
/** @var string[] */ /** @var string[] */
private $mediaTypes; private $mediaTypes;
/** @var NameConverterInterface[] */ /** @var NameConverterInterface|null */
private $nameConverter; private $nameConverter;
/** @var bool */ /** @var bool */
private $useValidationGroups; private $useValidationGroups;
public function __construct( public function __construct(
PropertyInfoExtractorInterface $propertyInfo, PropertyInfoExtractorInterface $propertyInfo,
ClassMetadataFactoryInterface $classMetadataFactory,
Reader $reader, Reader $reader,
iterable $propertyDescribers, iterable $propertyDescribers,
array $mediaTypes, array $mediaTypes,
NameConverterInterface $nameConverter = null, NameConverterInterface $nameConverter = null,
bool $useValidationGroups = false bool $useValidationGroups = false,
ClassMetadataFactoryInterface $classMetadataFactory = null
) { ) {
$this->propertyInfo = $propertyInfo; $this->propertyInfo = $propertyInfo;
$this->classMetadataFactory = $classMetadataFactory;
$this->doctrineReader = $reader; $this->doctrineReader = $reader;
$this->propertyDescribers = $propertyDescribers; $this->propertyDescribers = $propertyDescribers;
$this->mediaTypes = $mediaTypes; $this->mediaTypes = $mediaTypes;
$this->nameConverter = $nameConverter; $this->nameConverter = $nameConverter;
$this->useValidationGroups = $useValidationGroups; $this->useValidationGroups = $useValidationGroups;
$this->classMetadataFactory = $classMetadataFactory;
} }
public function describe(Model $model, OA\Schema $schema) public function describe(Model $model, OA\Schema $schema)
@ -89,9 +89,12 @@ class ObjectModelDescriber implements ModelDescriberInterface, ModelRegistryAwar
$schema->type = 'object'; $schema->type = 'object';
$mapping = $this->classMetadataFactory $mapping = false;
->getMetadataFor($class) if (null !== $this->classMetadataFactory) {
->getClassDiscriminatorMapping(); $mapping = $this->classMetadataFactory
->getMetadataFor($class)
->getClassDiscriminatorMapping();
}
if ($mapping && Generator::UNDEFINED === $schema->discriminator) { if ($mapping && Generator::UNDEFINED === $schema->discriminator) {
$this->applyOpenApiDiscriminator( $this->applyOpenApiDiscriminator(

View File

@ -71,12 +71,12 @@
<!-- Model Describers --> <!-- Model Describers -->
<service id="nelmio_api_doc.model_describers.object" class="Nelmio\ApiDocBundle\ModelDescriber\ObjectModelDescriber" public="false"> <service id="nelmio_api_doc.model_describers.object" class="Nelmio\ApiDocBundle\ModelDescriber\ObjectModelDescriber" public="false">
<argument type="service" id="property_info" /> <argument type="service" id="property_info" />
<argument type="service" id="serializer.mapping.class_metadata_factory" />
<argument type="service" id="annotations.reader" /> <argument type="service" id="annotations.reader" />
<argument type="tagged" tag="nelmio_api_doc.object_model.property_describer" /> <argument type="tagged" tag="nelmio_api_doc.object_model.property_describer" />
<argument /> <argument />
<argument type="service" id="serializer.name_converter.metadata_aware" on-invalid="ignore" /> <argument type="service" id="serializer.name_converter.metadata_aware" on-invalid="ignore" />
<argument>%nelmio_api_doc.use_validation_groups%</argument> <argument>%nelmio_api_doc.use_validation_groups%</argument>
<argument type="service" id="serializer.mapping.class_metadata_factory" on-invalid="ignore" />
<tag name="nelmio_api_doc.model_describer" /> <tag name="nelmio_api_doc.model_describer" />
</service> </service>