<?php
namespace LaunchPad\Bundle\LaunchPadBundle\Api\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class SwaggerController extends BaseApiController
{
/**
* @Route("/swagger", name="api_root_swagger")
*/
public function indexAction(Request $request)
{
$apiDefinitions = $this->getParameter('api');
$scheme = $request->query->get('scheme');
if(!$scheme) {
return $this->render(
"@WebsiteTemplates/swagger/index.html.twig",
[
'definitions' => $apiDefinitions
]
);
}
return $this->render(
"@WebsiteTemplates/swagger/ui.html.twig",
[
'url' => 'swagger/definition?scheme=' . urlencode($scheme)
]
);
}
/**
* @Route("/swagger/definition", name="api_definition_swagger")
* @param Request $request
* @return Response
*/
public function apiDefinitionAction(Request $request)
{
$scheme = $request->query->get('scheme');
$apiDefinitions = $this->getParameter('api');
//dump($apiDefinitions);die;
$selectedDefinition = null;
foreach($apiDefinitions as $definition) {
if($definition['name'] == $scheme) {
$selectedDefinition = $definition;
break;
}
}
//dump($selectedDefinition);die;
$openapi = \OpenApi\scan($selectedDefinition['paths']);
header('Content-Type: application/json');
return new Response($openapi->toJson());
}
}