welcome back to dyb-tech
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
<?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\Describer;
|
||||
|
||||
use Nelmio\ApiDocBundle\RouteDescriber\RouteDescriberInterface;
|
||||
use Nelmio\ApiDocBundle\Util\ControllerReflector;
|
||||
use OpenApi\Annotations as OA;
|
||||
use Symfony\Component\Routing\RouteCollection;
|
||||
|
||||
final class RouteDescriber implements DescriberInterface, ModelRegistryAwareInterface
|
||||
{
|
||||
use ModelRegistryAwareTrait;
|
||||
|
||||
private $routeCollection;
|
||||
|
||||
private $controllerReflector;
|
||||
|
||||
private $routeDescribers;
|
||||
|
||||
/**
|
||||
* @param RouteDescriberInterface[]|iterable $routeDescribers
|
||||
*/
|
||||
public function __construct(RouteCollection $routeCollection, ControllerReflector $controllerReflector, $routeDescribers)
|
||||
{
|
||||
$this->routeCollection = $routeCollection;
|
||||
$this->controllerReflector = $controllerReflector;
|
||||
$this->routeDescribers = $routeDescribers;
|
||||
}
|
||||
|
||||
public function describe(OA\OpenApi $api)
|
||||
{
|
||||
if (0 === count($this->routeDescribers)) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($this->routeCollection->all() as $route) {
|
||||
if (!$route->hasDefault('_controller')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// if able to resolve the controller
|
||||
$controller = $route->getDefault('_controller');
|
||||
if ($method = $this->controllerReflector->getReflectionMethod($controller)) {
|
||||
// Extract as many information as possible about this route
|
||||
foreach ($this->routeDescribers as $describer) {
|
||||
if ($describer instanceof ModelRegistryAwareInterface) {
|
||||
$describer->setModelRegistry($this->modelRegistry);
|
||||
}
|
||||
|
||||
$describer->describe($api, $route, $method);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user