소스 검색

Added useMiddlewares option - Fixes #112

Marcel Pociot 8 년 전
부모
커밋
c38692d740

+ 1 - 0
README.md

@@ -46,6 +46,7 @@ Option | Description
 `middleware` | The middlewares to use for generation
 `noResponseCalls` | Disable API response calls
 `noPostmanCollection` | Disable Postman collection creation
+`useMiddlewares` | Use all configured route middlewares (Needed for Laravel 5.3 `SubstituteBindings` middleware)
 `actAsUserId` | The user ID to use for authenticated API response calls
 `router` | The router to use, when processing the route files (can be Laravel or Dingo - defaults to Laravel)
 `bindings` | List of route bindings that should be replaced when trying to retrieve route results. Syntax format: `binding_one,id|binding_two,id`

+ 3 - 0
src/Mpociot/ApiDoc/Commands/GenerateDocumentation.php

@@ -27,6 +27,7 @@ class GenerateDocumentation extends Command
                             {--middleware= : The middleware to use for generation}
                             {--noResponseCalls : Disable API response calls}
                             {--noPostmanCollection : Disable Postman collection creation}
+                            {--useMiddlewares : Use all configured route middlewares}
                             {--actAsUserId= : The user ID to use for API response calls}
                             {--router=laravel : The router to be used (Laravel or Dingo)}
                             {--force : Force rewriting of existing routes}
@@ -76,6 +77,8 @@ class GenerateDocumentation extends Command
             return false;
         }
 
+        $generator->prepareMiddleware($this->option('useMiddlewares'));
+
         if ($this->option('router') === 'laravel') {
             $parsedRoutes = $this->processLaravelRoutes($generator, $allowedRoutes, $routePrefix, $middleware);
         } else {

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

@@ -29,6 +29,15 @@ abstract class AbstractGenerator
      */
     abstract public function processRoute($route, $bindings = [], $withResponse = true);
 
+    /**
+     * Prepares / Disables route middlewares
+     * 
+     * @param  boolean $disable
+     *
+     * @return  void
+     */
+    abstract public function prepareMiddleware($disable = false);
+
     /**
      * @param array $routeData
      * @param array $routeAction
@@ -78,7 +87,7 @@ abstract class AbstractGenerator
 
         //Changes url with parameters like /users/{user} to /users/1
         $uri = preg_replace('/{(.*)}/', 1, $uri);
-
+        
         return $this->callRoute(array_shift($methods), $uri, [], [], [], $headers);
     }
 

+ 13 - 0
src/Mpociot/ApiDoc/Generators/DingoGenerator.php

@@ -41,6 +41,19 @@ class DingoGenerator extends AbstractGenerator
         ], $routeAction, $bindings);
     }
 
+    /**
+     * Prepares / Disables route middlewares
+     * 
+     * @param  boolean $disable
+     *
+     * @return  void
+     */
+    public function prepareMiddleware($disable = true)
+    {
+        // Not needed by Dingo
+        return false;
+    }
+
     /**
      * {@inheritdoc}
      */

+ 13 - 3
src/Mpociot/ApiDoc/Generators/LaravelGenerator.php

@@ -56,6 +56,18 @@ class LaravelGenerator extends AbstractGenerator
         ], $routeAction, $bindings);
     }
 
+    /**
+     * Prepares / Disables route middlewares
+     * 
+     * @param  boolean $disable
+     *
+     * @return  void
+     */
+    public function prepareMiddleware($disable = true)
+    {
+        App::instance('middleware.disable', true);
+    }
+
     /**
      * Call the given URI and return the Response.
      *
@@ -71,9 +83,6 @@ class LaravelGenerator extends AbstractGenerator
      */
     public function callRoute($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
     {
-        $kernel = App::make('Illuminate\Contracts\Http\Kernel');
-        App::instance('middleware.disable', true);
-
         $server = collect([
             'CONTENT_TYPE' => 'application/json',
             'Accept' => 'application/json',
@@ -84,6 +93,7 @@ class LaravelGenerator extends AbstractGenerator
             $cookies, $files, $this->transformHeadersToServerVars($server), $content
         );
 
+        $kernel = App::make('Illuminate\Contracts\Http\Kernel');
         $response = $kernel->handle($request);
 
         $kernel->terminate($request, $response);