2017-06-26 10:34:42 +02:00
< ? php
/*
* This file is part of the NelmioApiDocBundle package .
*
* ( c ) Nelmio
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Nelmio\ApiDocBundle\Controller ;
use Nelmio\ApiDocBundle\ApiDocGenerator ;
2018-01-05 13:08:02 +01:00
use Psr\Container\ContainerInterface ;
use Symfony\Component\DependencyInjection\ServiceLocator ;
2017-06-26 10:34:42 +02:00
use Symfony\Component\HttpFoundation\JsonResponse ;
2017-07-05 15:41:53 +02:00
use Symfony\Component\HttpFoundation\Request ;
2018-01-05 13:08:02 +01:00
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException ;
2017-06-26 10:34:42 +02:00
final class DocumentationController
{
2018-01-05 13:08:02 +01:00
private $generatorLocator ;
2017-06-26 10:34:42 +02:00
2018-01-05 13:08:02 +01:00
/**
* @ param ContainerInterface $generatorLocator
*/
public function __construct ( $generatorLocator )
2017-06-26 10:34:42 +02:00
{
2018-01-05 13:08:02 +01:00
if ( ! $generatorLocator instanceof ContainerInterface ) {
if ( ! $generatorLocator instanceof ApiDocGenerator ) {
throw new \InvalidArgumentException ( sprintf ( 'Providing an instance of "%s" to "%s" is not supported.' , get_class ( $generatorLocator ), __METHOD__ ));
}
@ trigger_error ( sprintf ( 'Providing an instance of "%s" to "%s()" is deprecated since version 3.1. Provide it an instance of "%s" instead.' , ApiDocGenerator :: class , __METHOD__ , ContainerInterface :: class ), E_USER_DEPRECATED );
$generatorLocator = new ServiceLocator ([ 'default' => function () use ( $generatorLocator ) : ApiDocGenerator {
return $generatorLocator ;
}]);
}
$this -> generatorLocator = $generatorLocator ;
2017-06-26 10:34:42 +02:00
}
2018-01-05 13:08:02 +01:00
public function __invoke ( Request $request , $area = 'default' )
2017-06-26 10:34:42 +02:00
{
2018-01-05 13:08:02 +01:00
if ( ! $this -> generatorLocator -> has ( $area )) {
throw new BadRequestHttpException ( sprintf ( 'Area "%s" is not supported.' , $area ));
}
$spec = $this -> generatorLocator -> get ( $area ) -> generate () -> toArray ();
2017-07-05 15:41:53 +02:00
if ( '' !== $request -> getBaseUrl ()) {
$spec [ 'basePath' ] = $request -> getBaseUrl ();
}
return new JsonResponse ( $spec );
2017-06-26 10:34:42 +02:00
}
}