vendor/nelmio/api-doc-bundle/Controller/SwaggerUiController.php line 22

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\Controller;
  11. use OpenApi\Annotations\OpenApi;
  12. use OpenApi\Annotations\Server;
  13. use Psr\Container\ContainerInterface;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  17. use Twig\Environment;
  18. final class SwaggerUiController
  19. {
  20.     private $generatorLocator;
  21.     private $twig;
  22.     public function __construct(ContainerInterface $generatorLocator$twig)
  23.     {
  24.         if (!$twig instanceof \Twig_Environment && !$twig instanceof Environment) {
  25.             throw new \InvalidArgumentException(sprintf('Providing an instance of "%s" as twig is not supported.'get_class($twig)));
  26.         }
  27.         $this->generatorLocator $generatorLocator;
  28.         $this->twig $twig;
  29.     }
  30.     public function __invoke(Request $request$area 'default')
  31.     {
  32.         if (!$this->generatorLocator->has($area)) {
  33.             $advice '';
  34.             if (false !== strpos($area'.json')) {
  35.                 $advice ' Since the area provided contains `.json`, the issue is likely caused by route priorities. Try switching the Swagger UI / the json documentation routes order.';
  36.             }
  37.             throw new BadRequestHttpException(sprintf('Area "%s" is not supported as it isn\'t defined in config.%s'$area$advice));
  38.         }
  39.         /** @var OpenApi $spec */
  40.         $spec $this->generatorLocator->get($area)->generate();
  41.         if ('' !== $request->getBaseUrl()) {
  42.             $spec->servers = [new Server(['url' => $request->getSchemeAndHttpHost().$request->getBaseUrl()])];
  43.         }
  44.         return new Response(
  45.             $this->twig->render(
  46.                 '@NelmioApiDoc/SwaggerUi/index.html.twig',
  47.                 ['swagger_data' => ['spec' => json_decode($spec->toJson(), true)]]
  48.             ),
  49.             Response::HTTP_OK,
  50.             ['Content-Type' => 'text/html']
  51.         );
  52.         return $response->setCharset('UTF-8');
  53.     }
  54. }