diff --git a/Annotation/Model.php b/Annotation/Model.php index 811b00b..d4aeff5 100644 --- a/Annotation/Model.php +++ b/Annotation/Model.php @@ -23,7 +23,9 @@ final class Model extends AbstractAnnotation 'type' => 'string', 'groups' => '[string]', ]; + public static $_required = ['type']; + public static $_parents = [ 'Swagger\Annotations\Parameter', 'Swagger\Annotations\Response', diff --git a/ApiDocGenerator.php b/ApiDocGenerator.php index e659f22..36704d5 100644 --- a/ApiDocGenerator.php +++ b/ApiDocGenerator.php @@ -21,8 +21,11 @@ use Psr\Cache\CacheItemPoolInterface; final class ApiDocGenerator { private $swagger; + private $describers; + private $modelDescribers; + private $cacheItemPool; /** diff --git a/Controller/SwaggerUiController.php b/Controller/SwaggerUiController.php index f0febea..b435bb1 100644 --- a/Controller/SwaggerUiController.php +++ b/Controller/SwaggerUiController.php @@ -18,6 +18,7 @@ use Symfony\Component\HttpFoundation\Response; final class SwaggerUiController { private $apiDocGenerator; + private $twig; public function __construct(ApiDocGenerator $apiDocGenerator, \Twig_Environment $twig) diff --git a/DependencyInjection/Compiler/PriorityTaggedServiceTrait.php b/DependencyInjection/Compiler/PriorityTaggedServiceTrait.php index cbd22dd..1bf31f7 100644 --- a/DependencyInjection/Compiler/PriorityTaggedServiceTrait.php +++ b/DependencyInjection/Compiler/PriorityTaggedServiceTrait.php @@ -40,7 +40,7 @@ trait PriorityTaggedServiceTrait */ private function findAndSortTaggedServices($tagName, ContainerBuilder $container) { - $services = array(); + $services = []; foreach ($container->findTaggedServiceIds($tagName) as $serviceId => $tags) { foreach ($tags as $attributes) { $priority = isset($attributes['priority']) ? $attributes['priority'] : 0; diff --git a/Describer/ApiPlatformDescriber.php b/Describer/ApiPlatformDescriber.php index 04a4863..1e94aa4 100644 --- a/Describer/ApiPlatformDescriber.php +++ b/Describer/ApiPlatformDescriber.php @@ -23,6 +23,7 @@ final class ApiPlatformDescriber extends ExternalDocDescriber parent::__construct(function () use ($documentation, $normalizer, $urlGenerator) { $baseContext = $urlGenerator->getContext(); $urlGenerator->setContext(new RequestContext()); + try { $basePath = $urlGenerator->generate('api_entrypoint'); } finally { diff --git a/Describer/ExternalDocDescriber.php b/Describer/ExternalDocDescriber.php index a677c1f..d322c44 100644 --- a/Describer/ExternalDocDescriber.php +++ b/Describer/ExternalDocDescriber.php @@ -16,6 +16,7 @@ use EXSyst\Component\Swagger\Swagger; class ExternalDocDescriber implements DescriberInterface { private $externalDoc; + private $overwrite; /** diff --git a/Describer/RouteDescriber.php b/Describer/RouteDescriber.php index 70f1d66..ff5754e 100644 --- a/Describer/RouteDescriber.php +++ b/Describer/RouteDescriber.php @@ -22,7 +22,9 @@ final class RouteDescriber implements DescriberInterface, ModelRegistryAwareInte use ModelRegistryAwareTrait; private $routeCollection; + private $controllerReflector; + private $routeDescribers; /** diff --git a/Describer/SwaggerPhpDescriber.php b/Describer/SwaggerPhpDescriber.php index 0bac7ca..70d4106 100644 --- a/Describer/SwaggerPhpDescriber.php +++ b/Describer/SwaggerPhpDescriber.php @@ -28,7 +28,9 @@ final class SwaggerPhpDescriber extends ExternalDocDescriber implements ModelReg use ModelRegistryAwareTrait; private $routeCollection; + private $controllerReflector; + private $annotationReader; public function __construct(RouteCollection $routeCollection, ControllerReflector $controllerReflector, Reader $annotationReader, bool $overwrite = false) diff --git a/Model/Model.php b/Model/Model.php index 43fffb6..d24ed01 100644 --- a/Model/Model.php +++ b/Model/Model.php @@ -16,6 +16,7 @@ use Symfony\Component\PropertyInfo\Type; final class Model { private $type; + private $groups; /** diff --git a/Model/ModelRegistry.php b/Model/ModelRegistry.php index 6f42f54..af326e0 100644 --- a/Model/ModelRegistry.php +++ b/Model/ModelRegistry.php @@ -20,9 +20,13 @@ use Symfony\Component\PropertyInfo\Type; final class ModelRegistry { private $unregistered = []; + private $models = []; + private $names = []; + private $modelDescribers = []; + private $api; /** diff --git a/ModelDescriber/FormModelDescriber.php b/ModelDescriber/FormModelDescriber.php index 9444a14..11c6862 100644 --- a/ModelDescriber/FormModelDescriber.php +++ b/ModelDescriber/FormModelDescriber.php @@ -70,28 +70,33 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry if ('text' === $blockPrefix) { $property->setType('string'); + break; } if ('number' === $blockPrefix) { $property->setType('number'); + break; } if ('integer' === $blockPrefix) { $property->setType('integer'); + break; } if ('date' === $blockPrefix) { $property->setType('string'); $property->setFormat('date'); + break; } if ('datetime' === $blockPrefix) { $property->setType('string'); $property->setFormat('date-time'); + break; } @@ -115,6 +120,7 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry $model = new Model(new Type(Type::BUILTIN_TYPE_OBJECT, false, $subType), null); $property->getItems()->setRef($this->modelRegistry->register($model)); $property->setExample(sprintf('[{%s}]', $subType)); + break; } @@ -129,6 +135,7 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry $property->setType('string'); $property->setFormat(sprintf('%s id', $entityClass)); } + break; } @@ -136,6 +143,7 @@ final class FormModelDescriber implements ModelDescriberInterface, ModelRegistry //if form type is not builtin in Form component. $model = new Model(new Type(Type::BUILTIN_TYPE_OBJECT, false, $formClass)); $property->setRef($this->modelRegistry->register($model)); + break; } } diff --git a/ModelDescriber/JMSModelDescriber.php b/ModelDescriber/JMSModelDescriber.php index 47b0bb9..9c7d723 100644 --- a/ModelDescriber/JMSModelDescriber.php +++ b/ModelDescriber/JMSModelDescriber.php @@ -119,6 +119,7 @@ class JMSModelDescriber implements ModelDescriberInterface, ModelRegistryAwareIn public function supports(Model $model): bool { $className = $model->getType()->getClassName(); + try { if ($this->factory->getMetadataForClass($className)) { return true; diff --git a/ModelDescriber/PhpdocPropertyAnnotationReader.php b/ModelDescriber/PhpdocPropertyAnnotationReader.php index 2f30700..6811e8a 100644 --- a/ModelDescriber/PhpdocPropertyAnnotationReader.php +++ b/ModelDescriber/PhpdocPropertyAnnotationReader.php @@ -11,8 +11,8 @@ namespace Nelmio\ApiDocBundle\ModelDescriber; -use EXSyst\Component\Swagger\Schema; use EXSyst\Component\Swagger\Items; +use EXSyst\Component\Swagger\Schema; use phpDocumentor\Reflection\DocBlock\Tags\Var_; use phpDocumentor\Reflection\DocBlockFactory; use phpDocumentor\Reflection\DocBlockFactoryInterface; @@ -56,13 +56,15 @@ class PhpdocPropertyAnnotationReader continue; } $title = $description->render(); - if ($title) break; + if ($title) { + break; + } } } - if ($property->getTitle() === null && $title) { + if (null === $property->getTitle() && $title) { $property->setTitle($title); } - if ($property->getDescription() === null && $docBlock->getDescription() && $docBlock->getDescription()->render()) { + if (null === $property->getDescription() && $docBlock->getDescription() && $docBlock->getDescription()->render()) { $property->setDescription($docBlock->getDescription()->render()); } } diff --git a/RouteDescriber/PhpDocDescriber.php b/RouteDescriber/PhpDocDescriber.php index bfe8774..c316795 100644 --- a/RouteDescriber/PhpDocDescriber.php +++ b/RouteDescriber/PhpDocDescriber.php @@ -39,6 +39,7 @@ final class PhpDocDescriber implements RouteDescriberInterface $classDocBlock = $this->docBlockFactory->create($reflectionMethod->getDeclaringClass()); } catch (\Exception $e) { } + try { $docBlock = $this->docBlockFactory->create($reflectionMethod); } catch (\Exception $e) { diff --git a/Tests/Describer/RouteDescriberTest.php b/Tests/Describer/RouteDescriberTest.php index 27ba812..d9cf2b4 100644 --- a/Tests/Describer/RouteDescriberTest.php +++ b/Tests/Describer/RouteDescriberTest.php @@ -23,6 +23,7 @@ use Symfony\Component\Routing\RouteCollection; class RouteDescriberTest extends AbstractDescriberTest { private $routes; + private $routeDescriber; public function testIgnoreWhenNoController() diff --git a/Tests/Functional/FunctionalTest.php b/Tests/Functional/FunctionalTest.php index 9baaa53..3121786 100644 --- a/Tests/Functional/FunctionalTest.php +++ b/Tests/Functional/FunctionalTest.php @@ -77,7 +77,7 @@ class FunctionalTest extends WebTestCase { $operation = $this->getOperation('/api/swagger/implicit', $method); - $this->assertEquals(array(new Tag('implicit')), $operation->getTags()); + $this->assertEquals([new Tag('implicit')], $operation->getTags()); $responses = $operation->getResponses(); $this->assertTrue($responses->has('201')); diff --git a/Tests/Functional/JMSFunctionalTest.php b/Tests/Functional/JMSFunctionalTest.php index ff653e0..c73c1ad 100644 --- a/Tests/Functional/JMSFunctionalTest.php +++ b/Tests/Functional/JMSFunctionalTest.php @@ -78,7 +78,7 @@ class JMSFunctionalTest extends WebTestCase ], $this->getModel('VirtualProperty')->toArray()); } - protected static function createKernel(array $options = array()) + protected static function createKernel(array $options = []) { return new TestKernel(true); } diff --git a/Tests/Functional/WebTestCase.php b/Tests/Functional/WebTestCase.php index cfa70d1..ddadbf7 100644 --- a/Tests/Functional/WebTestCase.php +++ b/Tests/Functional/WebTestCase.php @@ -17,7 +17,7 @@ use Symfony\Bundle\FrameworkBundle\Test\WebTestCase as BaseWebTestCase; class WebTestCase extends BaseWebTestCase { - protected static function createKernel(array $options = array()) + protected static function createKernel(array $options = []) { return new TestKernel(); } diff --git a/Util/ControllerReflector.php b/Util/ControllerReflector.php index 6a6f9ff..3ea247f 100644 --- a/Util/ControllerReflector.php +++ b/Util/ControllerReflector.php @@ -20,6 +20,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface; final class ControllerReflector { private $container; + private $controllerNameParser; private $controllers = []; @@ -45,6 +46,7 @@ final class ControllerReflector } list($class, $method) = $callable; + try { return new \ReflectionMethod($class, $method); } catch (\ReflectionException $e) { @@ -61,6 +63,7 @@ final class ControllerReflector } list($class, $method) = $callable; + try { return [new \ReflectionClass($class), new \ReflectionMethod($class, $method)]; } catch (\ReflectionException $e) {