瀏覽代碼

Fixes #51

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

+ 10 - 3
src/Mpociot/ApiDoc/Generators/AbstractGenerator.php

@@ -31,12 +31,13 @@ abstract class AbstractGenerator
     /**
     /**
      * @param array $routeData
      * @param array $routeData
      * @param array $routeAction
      * @param array $routeAction
+     * @param array $bindings
      *
      *
      * @return mixed
      * @return mixed
      */
      */
-    protected function getParameters($routeData, $routeAction)
+    protected function getParameters($routeData, $routeAction, $bindings)
     {
     {
-        $validator = Validator::make([], $this->getRouteRules($routeAction['uses']));
+        $validator = Validator::make([], $this->getRouteRules($routeAction['uses'], $bindings));
         foreach ($validator->getRules() as $attribute => $rules) {
         foreach ($validator->getRules() as $attribute => $rules) {
             $attributeData = [
             $attributeData = [
                 'required' => false,
                 'required' => false,
@@ -128,10 +129,11 @@ abstract class AbstractGenerator
 
 
     /**
     /**
      * @param  $route
      * @param  $route
+     * @param  array $bindings
      *
      *
      * @return array
      * @return array
      */
      */
-    protected function getRouteRules($route)
+    protected function getRouteRules($route, $bindings)
     {
     {
         list($class, $method) = explode('@', $route);
         list($class, $method) = explode('@', $route);
         $reflection = new ReflectionClass($class);
         $reflection = new ReflectionClass($class);
@@ -141,8 +143,13 @@ abstract class AbstractGenerator
             $parameterType = $parameter->getClass();
             $parameterType = $parameter->getClass();
             if (! is_null($parameterType) && class_exists($parameterType->name)) {
             if (! is_null($parameterType) && class_exists($parameterType->name)) {
                 $className = $parameterType->name;
                 $className = $parameterType->name;
+
                 $parameterReflection = new $className;
                 $parameterReflection = new $className;
                 if ($parameterReflection instanceof FormRequest) {
                 if ($parameterReflection instanceof FormRequest) {
+                    // Add route parameter bindings
+                    $parameterReflection->query->add($bindings);
+                    $parameterReflection->request->add($bindings);
+
                     if (method_exists($parameterReflection, 'validator')) {
                     if (method_exists($parameterReflection, 'validator')) {
                         return $parameterReflection->validator()->getRules();
                         return $parameterReflection->validator()->getRules();
                     } else {
                     } else {

+ 1 - 1
src/Mpociot/ApiDoc/Generators/DingoGenerator.php

@@ -36,7 +36,7 @@ class DingoGenerator extends AbstractGenerator
             'uri' => $route->uri(),
             'uri' => $route->uri(),
             'parameters' => [],
             'parameters' => [],
             'response' => $response,
             'response' => $response,
-        ], $routeAction);
+        ], $routeAction, $bindings);
     }
     }
 
 
     /**
     /**

+ 1 - 1
src/Mpociot/ApiDoc/Generators/LaravelGenerator.php

@@ -51,7 +51,7 @@ class LaravelGenerator extends AbstractGenerator
             'uri' => $route->getUri(),
             'uri' => $route->getUri(),
             'parameters' => [],
             'parameters' => [],
             'response' => $content,
             'response' => $content,
-        ], $routeAction);
+        ], $routeAction, $bindings);
     }
     }
 
 
     /**
     /**

+ 15 - 0
tests/Fixtures/DynamicRequest.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace Mpociot\ApiDoc\Tests\Fixtures;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class DynamicRequest extends FormRequest
+{
+    public function rules()
+    {
+        return [
+            'not_in' => 'not_in:'.$this->foo,
+        ];
+    }
+}

+ 5 - 0
tests/Fixtures/TestController.php

@@ -26,6 +26,11 @@ class TestController extends Controller
         return '';
         return '';
     }
     }
 
 
+    public function addRouteBindingsToRequestClass(DynamicRequest $request)
+    {
+        return '';
+    }
+
     public function fetchRouteResponse()
     public function fetchRouteResponse()
     {
     {
         $fixture = new \stdClass();
         $fixture = new \stdClass();

+ 14 - 0
tests/GenerateDocumentationTest.php

@@ -71,6 +71,20 @@ class GenerateDocumentationTest extends TestCase
         $this->assertSame($generatedMarkdown, $fixtureMarkdown);
         $this->assertSame($generatedMarkdown, $fixtureMarkdown);
     }
     }
 
 
+    public function testAddsBindingsToGetRouteRules()
+    {
+        RouteFacade::get('/api/test/{foo}', TestController::class.'@addRouteBindingsToRequestClass');
+
+        $this->artisan('api:generate', [
+            '--routePrefix' => 'api/*',
+            '--bindings' => 'foo,bar'
+        ]);
+        
+        $generatedMarkdown = file_get_contents(__DIR__.'/../public/docs/source/index.md');
+        
+        $this->assertContains('Not in: `bar`', $generatedMarkdown);
+    }
+
     /**
     /**
      * @param string $command
      * @param string $command
      * @param array $parameters
      * @param array $parameters