浏览代码

add one more usage case

Zolotov Alexander 6 年之前
父节点
当前提交
a9f8bb5f82
共有 3 个文件被更改,包括 30 次插入13 次删除
  1. 9 8
      src/Commands/GenerateDocumentation.php
  2. 1 5
      src/Tools/Generator.php
  3. 20 0
      src/Tools/Utils.php

+ 9 - 8
src/Commands/GenerateDocumentation.php

@@ -2,6 +2,7 @@
 
 namespace Mpociot\ApiDoc\Commands;
 
+use Mpociot\ApiDoc\Tools\Utils;
 use ReflectionClass;
 use ReflectionException;
 use Illuminate\Routing\Route;
@@ -207,7 +208,7 @@ class GenerateDocumentation extends Command
         foreach ($routes as $routeItem) {
             $route = $routeItem['route'];
             /** @var Route $route */
-            if ($this->isValidRoute($route) && $this->isRouteVisibleForDocumentation($route->getAction()['uses'])) {
+            if ($this->isValidRoute($route) && $this->isRouteVisibleForDocumentation($route->getAction())) {
                 $parsedRoutes[] = $generator->processRoute($route, $routeItem['apply']);
                 $this->info('Processed route: ['.implode(',', $generator->getMethods($route)).'] '.$generator->getUri($route));
             } else {
@@ -225,7 +226,7 @@ class GenerateDocumentation extends Command
      */
     private function isValidRoute(Route $route)
     {
-        $action = $route->getAction()['uses'];
+        $action = Utils::getRouteActionUses($route->getAction());
         if (is_array($action)) {
             $action = implode('@', $action);
         }
@@ -234,15 +235,15 @@ class GenerateDocumentation extends Command
     }
 
     /**
-     * @param $route
-     *
-     * @throws ReflectionException
+     * @param $action
      *
      * @return bool
+     *@throws ReflectionException
+     *
      */
-    private function isRouteVisibleForDocumentation($route)
+    private function isRouteVisibleForDocumentation($action)
     {
-        list($class, $method) = is_array($route) ? $route : explode('@', $route);
+        list($class, $method) = Utils::getRouteActionUses($action);
         $reflection = new ReflectionClass($class);
 
         if (! $reflection->hasMethod($method)) {
@@ -255,7 +256,7 @@ class GenerateDocumentation extends Command
             $phpdoc = new DocBlock($comment);
 
             return collect($phpdoc->getTags())
-                ->filter(function ($tag) use ($route) {
+                ->filter(function ($tag) use ($action) {
                     return $tag->getName() === 'hideFromAPIDocumentation';
                 })
                 ->isEmpty();

+ 1 - 5
src/Tools/Generator.php

@@ -53,11 +53,7 @@ class Generator
      */
     public function processRoute(Route $route, array $rulesToApply = [])
     {
-        $action = $route->getAction();
-        if (is_array($action) && array_key_exists('uses', $action)) {
-            $action = $action['uses'];
-        }
-        list($class, $method) = is_array($action) ? $action : explode('@', $action);
+        list($class, $method) = Utils::getRouteActionUses($route->getAction());
         $controller = new ReflectionClass($class);
         $method = $controller->getMethod($method);
 

+ 20 - 0
src/Tools/Utils.php

@@ -14,6 +14,26 @@ class Utils
         return self::replaceUrlParameterBindings($uri, $bindings);
     }
 
+    public static function getRouteActionUses(array $action): ?array
+    {
+        if ($action['uses'] !== null) {
+            if (is_array($action['uses'])) {
+                return $action['uses'];
+            }
+            elseif (is_string($action['uses'])) {
+                return explode('@', $action['uses']);
+            }
+        }
+        if (array_key_exists(0, $action) && array_key_exists(1, $action)) {
+            return [
+                0 => $action[0],
+                1 => $action[1]
+            ];
+        }
+
+        return null;
+    }
+
     /**
      * Transform parameters in URLs into real values (/users/{user} -> /users/2).
      * Uses bindings specified by caller, otherwise just uses '1'.