@@ -64,11 +64,7 @@ public function onKernelRequest(GetResponseEvent $event)
64
64
continue ;
65
65
}
66
66
67
- if (false !== strpos ($ name , '[ ' )) { // array notation of filter
68
- if (!$ this ->isArrayNotationFilterValid ($ name , $ request )) {
69
- $ errorList [] = sprintf ('Query parameter "%s" is required ' , $ name );
70
- }
71
- } elseif (null === $ request ->query ->get ($ name )) {
67
+ if (!$ this ->isRequiredFilterValid ($ name , $ request )) {
72
68
$ errorList [] = sprintf ('Query parameter "%s" is required ' , $ name );
73
69
}
74
70
@@ -79,14 +75,30 @@ public function onKernelRequest(GetResponseEvent $event)
79
75
}
80
76
}
81
77
82
- private function isArrayNotationFilterValid ($ name , $ request ): bool
78
+ /**
79
+ * Test if required filter is valid. It validates array notation too like "required[bar]".
80
+ */
81
+ private function isRequiredFilterValid ($ name , $ request ): bool
83
82
{
84
83
$ matches = [];
85
- preg_match ('/([^[]+)\[(.*)\]/ ' , $ name , $ matches );
86
- list (, $ rootName , $ keyName ) = $ matches ;
87
- $ keyName = $ keyName ?: 0 ; // array without index should test the first key
88
- $ queryParameter = $ request ->query ->get ($ rootName );
84
+ parse_str ($ name , $ matches );
85
+ if (empty ($ matches )) {
86
+ return false ;
87
+ }
88
+
89
+ $ rootName = array_keys ($ matches )[0 ] ?? '' ;
90
+ if (!$ rootName ) {
91
+ return false ;
92
+ }
93
+
94
+ if (is_array ($ matches [$ rootName ])) {
95
+ $ keyName = array_keys ($ matches [$ rootName ])[0 ];
96
+
97
+ $ queryParameter = $ request ->query ->get ($ rootName );
98
+
99
+ return is_array ($ queryParameter ) && isset ($ queryParameter [$ keyName ]);
100
+ }
89
101
90
- return is_array ( $ queryParameter ) && isset ( $ queryParameter [ $ keyName ] );
102
+ return null !== $ request -> query -> get ( $ rootName );
91
103
}
92
104
}
0 commit comments