mirror of
https://github.com/retailcrm/NelmioApiDocBundle.git
synced 2025-02-09 02:59:27 +03:00
* Added an Extractor to get the documentation from all annotated controllers * Refactored some parts (command, event listener, ...)
57 lines
1.5 KiB
PHP
57 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Nelmio\ApiBundle\Extractor;
|
|
|
|
use Doctrine\Common\Annotations\Reader;
|
|
use Symfony\Component\Routing\RouterInterface;
|
|
|
|
class ApiDocExtractor
|
|
{
|
|
const ANNOTATION_CLASS = 'Nelmio\\ApiBundle\\Annotation\\ApiDoc';
|
|
|
|
/**
|
|
* @var
|
|
*/
|
|
private $router;
|
|
|
|
/**
|
|
* @var \Doctrine\Common\Annotations\Reader
|
|
*/
|
|
private $reader;
|
|
|
|
public function __construct(RouterInterface $router, Reader $reader)
|
|
{
|
|
$this->router = $router;
|
|
$this->reader = $reader;
|
|
}
|
|
|
|
public function all()
|
|
{
|
|
$array = array();
|
|
foreach ($this->router->getRouteCollection()->all() as $route) {
|
|
preg_match('#(.+)::([\w]+)#', $route->getDefault('_controller'), $matches);
|
|
$method = new \ReflectionMethod($matches[1], $matches[2]);
|
|
|
|
if ($annot = $this->reader->getMethodAnnotation($method, self::ANNOTATION_CLASS)) {
|
|
$array[] = array('annotation' => $annot, 'route' => $route);
|
|
}
|
|
}
|
|
|
|
return $array;
|
|
}
|
|
|
|
public function get($controller, $route)
|
|
{
|
|
preg_match('#(.+)::([\w]+)#', $controller, $matches);
|
|
$method = new \ReflectionMethod($matches[1], $matches[2]);
|
|
|
|
if ($annot = $this->reader->getMethodAnnotation($method, self::ANNOTATION_CLASS)) {
|
|
if ($route = $this->router->getRouteCollection()->get($route)) {
|
|
return array('annotation' => $annot, 'route' => $route);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|