@@ -37,7 +37,7 @@ public function getDocs()
37
37
return array_filter ($ docs );
38
38
}
39
39
40
- public function sortDocs (array $ docs , $ sortBy = 'default ' ): Array
40
+ public function sortDocs (array $ docs , $ sortBy = 'default ' ): array
41
41
{
42
42
if ($ sortBy === 'route_names ' ) {
43
43
sort ($ docs );
@@ -72,7 +72,7 @@ public function sortDocs(array $docs, $sortBy = 'default'): Array
72
72
return $ sorted ;
73
73
}
74
74
75
- public function getControllersInfo (): Array
75
+ public function getControllersInfo (): array
76
76
{
77
77
$ controllersInfo = [];
78
78
$ routes = collect (Route::getRoutes ());
@@ -105,7 +105,7 @@ public function getControllersInfo(): Array
105
105
return $ controllersInfo ;
106
106
}
107
107
108
- public function appendRequestRules (Array $ controllersInfo )
108
+ public function appendRequestRules (array $ controllersInfo )
109
109
{
110
110
foreach ($ controllersInfo as $ index => $ controllerInfo ) {
111
111
$ controller = $ controllerInfo ['controller_full_path ' ];
@@ -125,7 +125,11 @@ public function appendRequestRules(Array $controllersInfo)
125
125
//throw $th;
126
126
}
127
127
if ($ requestClass instanceof FormRequest) {
128
- $ controllersInfo [$ index ]['rules ' ] = $ this ->flattenRules ($ requestClass ->rules ());
128
+ try {
129
+ $ controllersInfo [$ index ]['rules ' ] = $ this ->flattenRules ($ requestClass ->rules ());
130
+ } catch (\ErrorException $ th ) {
131
+ $ controllerInfo [$ index ]['rules ' ] = $ this ->rulesByRegex ($ requestClassName );
132
+ }
129
133
$ controllersInfo [$ index ]['docBlock ' ] = $ this ->lrdDocComment ($ reflectionMethod ->getDocComment ());
130
134
}
131
135
}
@@ -184,4 +188,34 @@ public function flattenRules($mixedRules)
184
188
185
189
return $ rules ;
186
190
}
191
+
192
+ public function rulesByRegex ($ requestClassName )
193
+ {
194
+ $ data = new ReflectionMethod ($ requestClassName , 'rules ' );
195
+ $ lines = file ($ data ->getFileName ());
196
+ $ rules = [];
197
+ for ($ i = $ data ->getStartLine () - 1 ; $ i <= $ data ->getEndLine () - 1 ; $ i ++) {
198
+ preg_match_all ("/(?:'| \").*?(?:'| \")/ " , $ lines [$ i ], $ matches );
199
+ $ rules [] = $ matches ;
200
+ }
201
+
202
+ $ rules = collect ($ rules )
203
+ ->filter (function ($ item ) {
204
+ return count ($ item [0 ]) > 0 ;
205
+ })
206
+ ->transform (function ($ item ) {
207
+ $ fieldName = Str::of ($ item [0 ][0 ])->replace (['" ' , "' " ], '' );
208
+ $ definedFieldRules = collect (array_slice ($ item [0 ], 1 ))->transform (function ($ rule ) {
209
+ return Str::of ($ rule )->replace (['" ' , "' " ], '' )->__toString ();
210
+ })->toArray ();
211
+
212
+ return ['key ' => $ fieldName , 'rules ' => $ definedFieldRules ];
213
+ })
214
+ ->keyBy ('key ' )
215
+ ->transform (function ($ item ) {
216
+ return $ item ['rules ' ];
217
+ })->toArray ();
218
+
219
+ return $ rules ;
220
+ }
187
221
}
0 commit comments