vendor/nelmio/api-doc-bundle/ApiDocGenerator.php line 50

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the NelmioApiDocBundle package.
  4.  *
  5.  * (c) Nelmio
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Nelmio\ApiDocBundle;
  11. use EXSyst\Component\Swagger\Swagger;
  12. use Nelmio\ApiDocBundle\Describer\DescriberInterface;
  13. use Nelmio\ApiDocBundle\Describer\ModelRegistryAwareInterface;
  14. use Nelmio\ApiDocBundle\Model\ModelRegistry;
  15. use Nelmio\ApiDocBundle\ModelDescriber\ModelDescriberInterface;
  16. use Psr\Cache\CacheItemPoolInterface;
  17. final class ApiDocGenerator
  18. {
  19.     private $swagger;
  20.     private $describers;
  21.     private $modelDescribers;
  22.     private $cacheItemPool;
  23.     private $alternativeNames = [];
  24.     /**
  25.      * @param DescriberInterface[]|iterable      $describers
  26.      * @param ModelDescriberInterface[]|iterable $modelDescribers
  27.      */
  28.     public function __construct($describers$modelDescribersCacheItemPoolInterface $cacheItemPool nullstring $cacheItemId null)
  29.     {
  30.         $this->describers $describers;
  31.         $this->modelDescribers $modelDescribers;
  32.         $this->cacheItemPool $cacheItemPool;
  33.         $this->cacheItemId $cacheItemId;
  34.     }
  35.     public function setAlternativeNames(array $alternativeNames)
  36.     {
  37.         $this->alternativeNames $alternativeNames;
  38.     }
  39.     public function generate(): Swagger
  40.     {
  41.         if (null !== $this->swagger) {
  42.             return $this->swagger;
  43.         }
  44.         if ($this->cacheItemPool) {
  45.             $item $this->cacheItemPool->getItem($this->cacheItemId ?? 'swagger_doc');
  46.             if ($item->isHit()) {
  47.                 return $this->swagger $item->get();
  48.             }
  49.         }
  50.         $this->swagger = new Swagger();
  51.         $modelRegistry = new ModelRegistry($this->modelDescribers$this->swagger$this->alternativeNames);
  52.         foreach ($this->describers as $describer) {
  53.             if ($describer instanceof ModelRegistryAwareInterface) {
  54.                 $describer->setModelRegistry($modelRegistry);
  55.             }
  56.             $describer->describe($this->swagger);
  57.         }
  58.         $modelRegistry->registerDefinitions();
  59.         if (isset($item)) {
  60.             $this->cacheItemPool->save($item->set($this->swagger));
  61.         }
  62.         return $this->swagger;
  63.     }
  64. }