1515namespace MaplePHP \Emitron ;
1616
1717use MaplePHP \Container \Reflection ;
18+ use MaplePHP \Http \ResponseFactory ;
1819use Psr \Http \Message \ResponseInterface ;
1920use Psr \Http \Message \ServerRequestInterface ;
2021use Psr \Http \Message \StreamInterface ;
@@ -33,34 +34,41 @@ public function run(ServerRequestInterface $request, ?StreamInterface $stream =
3334 {
3435 $ this ->dispatchConfig ->getRouter ()->dispatch (function ($ data , $ args , $ middlewares ) use ($ request , $ stream ) {
3536
37+ [$ data , $ args , $ middlewares ] = $ this ->reMap ($ data , $ args , $ middlewares );
38+
3639 if (!isset ($ data ['handler ' ])) {
37- throw new InvalidArgumentException ("The router dispatch method arg 1 is missing the 'handler' key. " );
40+ throw new InvalidArgumentException ("Missing 'handler' key. " );
3841 }
3942
4043 $ this ->container ->set ("request " , $ request );
4144 $ this ->container ->set ("args " , $ args );
4245 $ this ->container ->set ("configuration " , $ this ->getDispatchConfig ());
4346
44- $ response = $ this ->initRequestHandler ($ request , $ this ->getBody ($ stream ), $ middlewares );
47+ $ bodyStream = $ this ->getBody ($ stream );
48+ $ factory = new ResponseFactory ($ bodyStream );
4549
46- $ controller = $ data ['handler ' ];
47- if (!isset ($ controller [1 ])) {
48- $ controller [1 ] = '__invoke ' ;
49- }
50- if (count ($ controller ) === 2 ) {
51- [$ class , $ method ] = $ controller ;
52- if (method_exists ($ class , $ method )) {
53- $ reflect = new Reflection ($ class );
54- $ classInst = $ reflect ->dependencyInjector ();
55- // Can replace the active Response instance through Command instance
56- $ hasNewResponse = $ reflect ->dependencyInjector ($ classInst , $ method );
57- $ response = ($ hasNewResponse instanceof ResponseInterface) ? $ hasNewResponse : $ response ;
50+ $ finalHandler = new ControllerRequestHandler ($ factory , $ data ['handler ' ]);
51+
52+ $ response = $ this ->initRequestHandler (
53+ request: $ request ,
54+ stream: $ bodyStream ,
55+ finalHandler: $ finalHandler ,
56+ middlewares: $ middlewares
57+ );
5858
59- } else {
60- $ response ->getBody ()->write ("\nERROR: Could not load Controller class {$ class } and method {$ method }() \n" );
61- }
62- }
6359 $ this ->createEmitter ()->emit ($ response , $ request );
6460 });
6561 }
62+
63+
64+ function reMap ($ data , $ args , $ middlewares ) {
65+
66+ if (isset ($ data [1 ]) && $ middlewares instanceof ServerRequestInterface) {
67+ $ item = $ data [1 ];
68+ return [
69+ ["handler " => $ item ['controller ' ]], $ _REQUEST , ($ item ['data ' ] ?? [])
70+ ];
71+ }
72+ return [$ data , $ args , $ middlewares ];
73+ }
6674}
0 commit comments