@@ -125,35 +125,42 @@ protected function getFilterCaller($filter, string $position): Closure
125125 throw new InvalidArgumentException ('Invalid filter position passed: ' . $ position );
126126 }
127127
128+ if ($ filter instanceof FilterInterface) {
129+ $ filterInstances = [$ filter ];
130+ }
131+
128132 if (is_string ($ filter )) {
129133 // Check for an alias (no namespace)
130134 if (strpos ($ filter , '\\' ) === false ) {
131135 if (! isset ($ this ->filtersConfig ->aliases [$ filter ])) {
132136 throw new RuntimeException ("No filter found with alias ' {$ filter }' " );
133137 }
134138
135- $ filterClasses = $ this ->filtersConfig ->aliases [$ filter ];
139+ $ filterClasses = (array ) $ this ->filtersConfig ->aliases [$ filter ];
140+ } else {
141+ // FQCN
142+ $ filterClasses = [$ filter ];
136143 }
137144
138- $ filterClasses = (array ) $ filterClasses ;
139- }
145+ $ filterInstances = [];
140146
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 ();
144150
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 ;
147156 }
148157 }
149158
150159 $ request = clone $ this ->request ;
151160
152161 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 ) {
157164 $ result = $ filter ->before ($ request , $ params );
158165
159166 // @TODO The following logic is in Filters class.
@@ -177,10 +184,8 @@ protected function getFilterCaller($filter, string $position): Closure
177184
178185 $ response = clone $ this ->response ;
179186
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 ) {
184189 $ result = $ filter ->after ($ request , $ response , $ params );
185190
186191 // @TODO The following logic is in Filters class.
0 commit comments