@@ -148,7 +148,8 @@ protected function getDocblockResponse($tags)
148148 */
149149 protected function getParameters ($ routeData , $ routeAction , $ bindings )
150150 {
151- $ rules = $ this ->simplifyRules ($ this ->getRouteRules ($ routeData ['methods ' ], $ routeAction ['uses ' ], $ bindings ));
151+ $ validationRules = $ this ->getRouteValidationRules ($ routeData ['methods ' ], $ routeAction ['uses ' ], $ bindings );
152+ $ rules = $ this ->simplifyRules ($ validationRules );
152153
153154 foreach ($ rules as $ attribute => $ ruleset ) {
154155 $ attributeData = [
@@ -168,27 +169,32 @@ protected function getParameters($routeData, $routeAction, $bindings)
168169 }
169170
170171 /**
171- * Format the validation rules as plain array.
172+ * Format the validation rules as a plain array.
172173 *
173174 * @param array $rules
174175 *
175176 * @return array
176177 */
177178 protected function simplifyRules ($ rules )
178179 {
179- $ simplifiedRules = Validator::make ([], $ rules )->getRules ();
180+ // this will split all string rules into arrays of strings
181+ $ rules = Validator::make ([], $ rules )->getRules ();
180182
181- if (count ($ simplifiedRules ) === 0 ) {
182- return $ simplifiedRules ;
183+ if (count ($ rules ) === 0 ) {
184+ return $ rules ;
183185 }
184186
185- $ values = collect ($ simplifiedRules )
187+ // Laravel will ignore the nested array rules unless the key referenced exists and is an array
188+ // So we'll to create an empty array for each array attribute
189+ $ values = collect ($ rules )
186190 ->filter (function ($ values ) {
187191 return in_array ('array ' , $ values );
188192 })->map (function ($ val , $ key ) {
189193 return ['' ];
190194 })->all ();
191195
196+ // Now this will return the complete ruleset.
197+ // Nested array parameters will be present, with '*' replaced by '0'
192198 return Validator::make ($ values , $ rules )->getRules ();
193199 }
194200
@@ -287,10 +293,10 @@ protected function getRouteGroup($route)
287293 *
288294 * @return array
289295 */
290- protected function getRouteRules (array $ routeMethods , $ routeAction , $ bindings )
296+ protected function getRouteValidationRules (array $ routeMethods , $ routeAction , $ bindings )
291297 {
292- list ($ class , $ method ) = explode ('@ ' , $ routeAction );
293- $ reflection = new ReflectionClass ($ class );
298+ list ($ controller , $ method ) = explode ('@ ' , $ routeAction );
299+ $ reflection = new ReflectionClass ($ controller );
294300 $ reflectionMethod = $ reflection ->getMethod ($ method );
295301
296302 foreach ($ reflectionMethod ->getParameters () as $ parameter ) {
@@ -357,13 +363,13 @@ protected function splitValuePairs($parameters, $first = 'is ', $last = 'or ')
357363
358364 /**
359365 * @param string $rule
360- * @param string $ruleName
366+ * @param string $attribute
361367 * @param array $attributeData
362368 * @param int $seed
363369 *
364370 * @return void
365371 */
366- protected function parseRule ($ rule , $ ruleName , &$ attributeData , $ seed , $ routeData )
372+ protected function parseRule ($ rule , $ attribute , &$ attributeData , $ seed , $ routeData )
367373 {
368374 $ faker = Factory::create ();
369375 $ faker ->seed (crc32 ($ seed ));
@@ -510,7 +516,7 @@ protected function parseRule($rule, $ruleName, &$attributeData, $seed, $routeDat
510516 $ attributeData ['value ' ] = $ faker ->timezone ;
511517 break ;
512518 case 'exists ' :
513- $ fieldName = isset ($ parameters [1 ]) ? $ parameters [1 ] : $ ruleName ;
519+ $ fieldName = isset ($ parameters [1 ]) ? $ parameters [1 ] : $ attribute ;
514520 $ attributeData ['description ' ][] = Description::parse ($ rule )->with ([Str::singular ($ parameters [0 ]), $ fieldName ])->getDescription ();
515521 break ;
516522 case 'active_url ' :
@@ -627,7 +633,7 @@ protected function parseStringRule($rules)
627633
628634 // The format for specifying validation rules and parameters follows an
629635 // easy {rule}:{parameters} formatting convention. For instance the
630- // rule "Max :3" states that the value may only be three letters.
636+ // rule "max :3" states that the value may only be three letters.
631637 if (strpos ($ rules , ': ' ) !== false ) {
632638 list ($ rules , $ parameter ) = explode (': ' , $ rules , 2 );
633639
0 commit comments