mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-10 11:39:25 +03:00
set up DI and add type support
This commit is contained in:
parent
fe3629cdeb
commit
3fa948aee8
@ -103,6 +103,7 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI
|
|||||||
new Reference('jms_serializer.metadata_factory'),
|
new Reference('jms_serializer.metadata_factory'),
|
||||||
new Reference('jms_serializer.naming_strategy'),
|
new Reference('jms_serializer.naming_strategy'),
|
||||||
new Reference('nelmio_api_doc.model_describers.swagger_property_annotation_reader'),
|
new Reference('nelmio_api_doc.model_describers.swagger_property_annotation_reader'),
|
||||||
|
new Reference('nelmio_api_doc.model_describers.phpdoc_property_annotation_reader'),
|
||||||
])
|
])
|
||||||
->addTag('nelmio_api_doc.model_describer', ['priority' => 50]);
|
->addTag('nelmio_api_doc.model_describer', ['priority' => 50]);
|
||||||
}
|
}
|
||||||
|
@ -35,14 +35,18 @@ class JMSModelDescriber implements ModelDescriberInterface, ModelRegistryAwareIn
|
|||||||
|
|
||||||
private $swaggerPropertyAnnotationReader;
|
private $swaggerPropertyAnnotationReader;
|
||||||
|
|
||||||
|
private $phpdocPropertyAnnotationsReader;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
MetadataFactoryInterface $factory,
|
MetadataFactoryInterface $factory,
|
||||||
PropertyNamingStrategyInterface $namingStrategy,
|
PropertyNamingStrategyInterface $namingStrategy,
|
||||||
SwaggerPropertyAnnotationReader $swaggerPropertyAnnotationReader
|
SwaggerPropertyAnnotationReader $swaggerPropertyAnnotationReader,
|
||||||
|
PhpdocPropertyAnnotationReader $phpdocPropertyAnnotationReader
|
||||||
) {
|
) {
|
||||||
$this->factory = $factory;
|
$this->factory = $factory;
|
||||||
$this->namingStrategy = $namingStrategy;
|
$this->namingStrategy = $namingStrategy;
|
||||||
$this->swaggerPropertyAnnotationReader = $swaggerPropertyAnnotationReader;
|
$this->swaggerPropertyAnnotationReader = $swaggerPropertyAnnotationReader;
|
||||||
|
$this->phpdocPropertyAnnotationsReader = $phpdocPropertyAnnotationReader;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -103,8 +107,7 @@ class JMSModelDescriber implements ModelDescriberInterface, ModelRegistryAwareIn
|
|||||||
|
|
||||||
// read property options from Swagger Property annotation if it exists
|
// read property options from Swagger Property annotation if it exists
|
||||||
if (null !== $item->reflection) {
|
if (null !== $item->reflection) {
|
||||||
$phpdocReader = new PhpdocAnnotationReader();
|
$this->phpdocPropertyAnnotationsReader->updateWithPhpdoc($item->reflection, $realProp);
|
||||||
$phpdocReader->updateWithPhpdoc($item->reflection, $realProp);
|
|
||||||
$this->swaggerPropertyAnnotationReader->updateWithSwaggerPropertyAnnotation($item->reflection, $realProp);
|
$this->swaggerPropertyAnnotationReader->updateWithSwaggerPropertyAnnotation($item->reflection, $realProp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,11 @@ use phpDocumentor\Reflection\DocBlockFactory;
|
|||||||
use phpDocumentor\Reflection\DocBlockFactoryInterface;
|
use phpDocumentor\Reflection\DocBlockFactoryInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Extract information about properties of a model from the DocBlock comment.
|
||||||
|
*
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
class PhpdocAnnotationReader
|
class PhpdocPropertyAnnotationReader
|
||||||
{
|
{
|
||||||
private $docBlockFactory;
|
private $docBlockFactory;
|
||||||
|
|
||||||
@ -33,6 +35,8 @@ class PhpdocAnnotationReader
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Update the Swagger information with information from the DocBlock comment.
|
||||||
|
*
|
||||||
* @param \ReflectionProperty $reflectionProperty
|
* @param \ReflectionProperty $reflectionProperty
|
||||||
* @param Items|Schema $property
|
* @param Items|Schema $property
|
||||||
*/
|
*/
|
||||||
@ -40,22 +44,33 @@ class PhpdocAnnotationReader
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$docBlock = $this->docBlockFactory->create($reflectionProperty);
|
$docBlock = $this->docBlockFactory->create($reflectionProperty);
|
||||||
if (!$title = $docBlock->getSummary()) {
|
|
||||||
/** @var Var_ $var */
|
|
||||||
foreach ($docBlock->getTagsByName('var') as $var) {
|
|
||||||
if (null === $description = $var->getDescription()) continue;
|
|
||||||
$title = $description->render();
|
|
||||||
if ($title) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($property->getTitle() === null && $title) {
|
|
||||||
$property->setTitle($title);
|
|
||||||
}
|
|
||||||
if ($property->getDescription() === null && $docBlock->getDescription()) {
|
|
||||||
$property->setDescription($docBlock->getDescription()->render());
|
|
||||||
}
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
// ignore
|
// ignore
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$title = $docBlock->getSummary()) {
|
||||||
|
/** @var Var_ $var */
|
||||||
|
foreach ($docBlock->getTagsByName('var') as $var) {
|
||||||
|
if (null === $description = $var->getDescription()) continue;
|
||||||
|
$title = $description->render();
|
||||||
|
if ($title) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($property->getTitle() === null && $title) {
|
||||||
|
$property->setTitle($title);
|
||||||
|
}
|
||||||
|
if ($property->getDescription() === null && $docBlock->getDescription()) {
|
||||||
|
$property->setDescription($docBlock->getDescription()->render());
|
||||||
|
}
|
||||||
|
if ($property->getType() === null) {
|
||||||
|
/** @var Var_ $var */
|
||||||
|
foreach ($docBlock->getTagsByName('var') as $var) {
|
||||||
|
if ($var->getType()) {
|
||||||
|
$property->setType($var->getType());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -151,7 +151,7 @@ serialization groups when using the Symfony serializer.
|
|||||||
### If you're using the JMS Serializer
|
### If you're using the JMS Serializer
|
||||||
|
|
||||||
The metadata of the JMS serializer are used by default to describe your
|
The metadata of the JMS serializer are used by default to describe your
|
||||||
models.
|
models. Additional information is extracted from the PHP doc block comment.
|
||||||
|
|
||||||
In case you prefer using the [Symfony PropertyInfo component](https://symfony.com/doc/current/components/property_info.html) (you
|
In case you prefer using the [Symfony PropertyInfo component](https://symfony.com/doc/current/components/property_info.html) (you
|
||||||
won't be able to use JMS serialization groups), you can disable JMS serializer
|
won't be able to use JMS serialization groups), you can disable JMS serializer
|
||||||
|
@ -54,6 +54,12 @@
|
|||||||
<argument type="service" id="annotation_reader" />
|
<argument type="service" id="annotation_reader" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<service
|
||||||
|
id="nelmio_api_doc.model_describers.phpdoc_property_annotation_reader"
|
||||||
|
class="Nelmio\ApiDocBundle\ModelDescriber\PhpdocPropertyAnnotationReader"
|
||||||
|
public="false"
|
||||||
|
/>
|
||||||
|
|
||||||
<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="nelmio_api_doc.model_describers.swagger_property_annotation_reader" />
|
<argument type="service" id="nelmio_api_doc.model_describers.swagger_property_annotation_reader" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user