Browse Source

Merge pull request #474 from zasan1017/fix/version3.4.0

fix: Correspondence of ReflectionException of version 3.4.0
Shalvah 6 years ago
parent
commit
4560c86bd6
3 changed files with 54 additions and 1 deletions
  1. 7 1
      src/Tools/Generator.php
  2. 5 0
      tests/Fixtures/TestController.php
  3. 42 0
      tests/Unit/GeneratorTestCase.php

+ 7 - 1
src/Tools/Generator.php

@@ -87,7 +87,13 @@ class Generator
             $parameterClassName = version_compare(phpversion(), '7.1.0', '<')
                 ? $paramType->__toString()
                 : $paramType->getName();
-            $parameterClass = new ReflectionClass($parameterClassName);
+
+            try {
+                $parameterClass = new ReflectionClass($parameterClassName);
+            } catch (\ReflectionException $e) {
+                continue;
+            }
+
             if (class_exists('\Illuminate\Foundation\Http\FormRequest') && $parameterClass->isSubclassOf(\Illuminate\Foundation\Http\FormRequest::class)) {
                 $formRequestDocBlock = new DocBlock($parameterClass->getDocComment());
                 $bodyParametersFromDocBlock = $this->getBodyParametersFromDocBlock($formRequestDocBlock->getTags());

+ 5 - 0
tests/Fixtures/TestController.php

@@ -57,6 +57,11 @@ class TestController extends Controller
         return '';
     }
 
+    public function withMultipleFormRequestParameters(string $test, TestRequest $request)
+    {
+        return '';
+    }
+
     /**
      * @bodyParam direct_one string Is found directly on the method.
      */

+ 42 - 0
tests/Unit/GeneratorTestCase.php

@@ -139,6 +139,48 @@ abstract class GeneratorTestCase extends TestCase
         ], $bodyParameters);
     }
 
+    /** @test */
+    public function can_parse_multiple_form_request_body_parameters()
+    {
+        $route = $this->createRoute('GET', '/api/test', 'withMultipleFormRequestParameters');
+        $bodyParameters = $this->generator->processRoute($route)['bodyParameters'];
+
+        $this->assertArraySubset([
+            'user_id' => [
+                'type' => 'integer',
+                'required' => true,
+                'description' => 'The id of the user.',
+                'value' => 9,
+            ],
+            'room_id' => [
+                'type' => 'string',
+                'required' => false,
+                'description' => 'The id of the room.',
+            ],
+            'forever' => [
+                'type' => 'boolean',
+                'required' => false,
+                'description' => 'Whether to ban the user forever.',
+                'value' => false,
+            ],
+            'another_one' => [
+                'type' => 'number',
+                'required' => false,
+                'description' => 'Just need something here.',
+            ],
+            'yet_another_param' => [
+                'type' => 'object',
+                'required' => true,
+                'description' => '',
+            ],
+            'even_more_param' => [
+                'type' => 'array',
+                'required' => false,
+                'description' => '',
+            ],
+        ], $bodyParameters);
+    }
+
     /** @test */
     public function can_parse_query_parameters()
     {