@@ -125,35 +125,42 @@ protected function getFilterCaller($filter, string $position): Closure
125
125
throw new InvalidArgumentException ('Invalid filter position passed: ' . $ position );
126
126
}
127
127
128
+ if ($ filter instanceof FilterInterface) {
129
+ $ filterInstances = [$ filter ];
130
+ }
131
+
128
132
if (is_string ($ filter )) {
129
133
// Check for an alias (no namespace)
130
134
if (strpos ($ filter , '\\' ) === false ) {
131
135
if (! isset ($ this ->filtersConfig ->aliases [$ filter ])) {
132
136
throw new RuntimeException ("No filter found with alias ' {$ filter }' " );
133
137
}
134
138
135
- $ filterClasses = $ this ->filtersConfig ->aliases [$ filter ];
139
+ $ filterClasses = (array ) $ this ->filtersConfig ->aliases [$ filter ];
140
+ } else {
141
+ // FQCN
142
+ $ filterClasses = [$ filter ];
136
143
}
137
144
138
- $ filterClasses = (array ) $ filterClasses ;
139
- }
145
+ $ filterInstances = [];
140
146
141
- foreach ($ filterClasses as $ class ) {
142
- // Get an instance
143
- $ filter = new $ class ();
147
+ foreach ($ filterClasses as $ class ) {
148
+ // Get an instance
149
+ $ filter = new $ class ();
144
150
145
- if (! $ filter instanceof FilterInterface) {
146
- throw FilterException::forIncorrectInterface (get_class ($ filter ));
151
+ if (! $ filter instanceof FilterInterface) {
152
+ throw FilterException::forIncorrectInterface (get_class ($ filter ));
153
+ }
154
+
155
+ $ filterInstances [] = $ filter ;
147
156
}
148
157
}
149
158
150
159
$ request = clone $ this ->request ;
151
160
152
161
if ($ position === 'before ' ) {
153
- return static function (?array $ params = null ) use ($ filterClasses , $ request ) {
154
- foreach ($ filterClasses as $ class ) {
155
- $ filter = new $ class ();
156
-
162
+ return static function (?array $ params = null ) use ($ filterInstances , $ request ) {
163
+ foreach ($ filterInstances as $ filter ) {
157
164
$ result = $ filter ->before ($ request , $ params );
158
165
159
166
// @TODO The following logic is in Filters class.
@@ -177,10 +184,8 @@ protected function getFilterCaller($filter, string $position): Closure
177
184
178
185
$ response = clone $ this ->response ;
179
186
180
- return static function (?array $ params = null ) use ($ filterClasses , $ request , $ response ) {
181
- foreach ($ filterClasses as $ class ) {
182
- $ filter = new $ class ();
183
-
187
+ return static function (?array $ params = null ) use ($ filterInstances , $ request , $ response ) {
188
+ foreach ($ filterInstances as $ filter ) {
184
189
$ result = $ filter ->after ($ request , $ response , $ params );
185
190
186
191
// @TODO The following logic is in Filters class.
0 commit comments