瀏覽代碼

Add check for route groups
Modify FormRequest detection to allow usage of the IoC container

Marcel Pociot 8 年之前
父節點
當前提交
74dd9d54ea

+ 1 - 1
src/Mpociot/ApiDoc/Commands/GenerateDocumentation.php

@@ -224,7 +224,7 @@ class GenerateDocumentation extends Command
      */
     private function isValidRoute($route)
     {
-        return ! is_callable($route->getAction()['uses']);
+        return ! is_callable($route->getAction()['uses']) && ! is_null($route->getAction()['uses']);
     }
 
     /**

+ 2 - 2
src/Mpociot/ApiDoc/Generators/AbstractGenerator.php

@@ -144,8 +144,8 @@ abstract class AbstractGenerator
             if (! is_null($parameterType) && class_exists($parameterType->name)) {
                 $className = $parameterType->name;
 
-                $parameterReflection = new $className;
-                if ($parameterReflection instanceof FormRequest) {
+                if (is_subclass_of($className,FormRequest::class)) {
+                    $parameterReflection = new $className;
                     // Add route parameter bindings
                     $parameterReflection->query->add($bindings);
                     $parameterReflection->request->add($bindings);

+ 8 - 0
tests/ApiDocGeneratorTest.php

@@ -68,6 +68,14 @@ class ApiDocGeneratorTest extends TestCase
         $this->assertSame(['DELETE'], $parsed['methods']);
     }
 
+    public function testCanParseDependencyInjectionInControllerMethods()
+    {
+        RouteFacade::post('/post', TestController::class.'@dependencyInjection');
+        $route = new Route(['POST'], '/post', ['uses' => TestController::class.'@dependencyInjection']);
+        $parsed = $this->generator->processRoute($route);
+        $this->assertTrue(is_array($parsed));
+    }
+
     public function testCanParseFormRequestRules()
     {
         RouteFacade::post('/post', TestController::class.'@parseFormRequestRules');

+ 18 - 0
tests/Fixtures/DependencyInjection.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace Mpociot\ApiDoc\Tests\Fixtures;
+
+use Illuminate\Contracts\Filesystem\Filesystem;
+
+class DependencyInjection
+{
+    /**
+     * @var
+     */
+    private $filesystem;
+
+    public function __construct(Filesystem $filesystem)
+    {
+        $this->filesystem = $filesystem;
+    }
+}

+ 5 - 0
tests/Fixtures/TestController.php

@@ -48,4 +48,9 @@ class TestController extends Controller
             'delicious' => (bool) $fixture->delicious,
         ];
     }
+
+    public function dependencyInjection(DependencyInjection $dependency, TestRequest $request)
+    {
+        return '';
+    }
 }