From 8d771a925fd07f3e81d639701d5179002c5211bc Mon Sep 17 00:00:00 2001 From: Benjamin Bender Date: Wed, 27 Mar 2013 19:36:42 +0100 Subject: [PATCH] Fix for #163. Makes Reflection on Route-objects more robust. --- Extractor/ApiDocExtractor.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Extractor/ApiDocExtractor.php b/Extractor/ApiDocExtractor.php index 5a7dffc..142717c 100644 --- a/Extractor/ApiDocExtractor.php +++ b/Extractor/ApiDocExtractor.php @@ -16,7 +16,6 @@ use Nelmio\ApiDocBundle\Annotation\ApiDoc; use Nelmio\ApiDocBundle\Parser\ParserInterface; use Symfony\Component\Routing\Route; use Symfony\Component\Routing\RouterInterface; -use Symfony\Component\Routing\RouteCollection; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; use Nelmio\ApiDocBundle\Util\DocCommentExtractor; @@ -73,7 +72,7 @@ class ApiDocExtractor */ public function getRoutes() { - return $this->router->getRouteCollection()->getIterator(); + return $this->router->getRouteCollection()->all(); } /** @@ -91,7 +90,9 @@ class ApiDocExtractor * - annotation * - resource * - * @param \Traversable $routes The routes for which the annotations should be extracted + * @param \Traversable $routes \Traverseable of Route-objects for which the annotations should be extracted + * + * @throws \InvalidArgumentException if one element of \Traversable does not implement RouteInterface * * @return array */ @@ -101,9 +102,11 @@ class ApiDocExtractor $resources = array(); foreach ($routes as $route) { - if ($route instanceof RouteCollection) { - $array = array_merge($array, $this->extractAnnotations($route->getIterator())); - } elseif ($method = $this->getReflectionMethod($route->getDefault('_controller'))) { + if (!($route instanceof RouterInterface)) { + throw new \InvalidArgumentException(sprintf('All elements of $routes have to implement RouteInterface. "%s" given', gettype($route))); + } + + if ($method = $this->getReflectionMethod($route->getDefault('_controller'))) { if ($annotation = $this->reader->getMethodAnnotation($method, self::ANNOTATION_CLASS)) { if ($annotation->isResource()) { // remove format from routes used for resource grouping