1414
1515namespace MaplePHP \Emitron ;
1616
17- use MaplePHP \Container \Reflection ;
17+ use FastRoute \Dispatcher ;
18+ use MaplePHP \Core \Router \RouterDispatcher ;
1819use MaplePHP \Http \ResponseFactory ;
19- use Psr \Http \Message \ResponseInterface ;
2020use Psr \Http \Message \ServerRequestInterface ;
2121use Psr \Http \Message \StreamInterface ;
2222use MaplePHP \Log \InvalidArgumentException ;
@@ -32,22 +32,26 @@ class Kernel extends AbstractKernel
3232 */
3333 public function run (ServerRequestInterface $ request , ?StreamInterface $ stream = null ): void
3434 {
35+
3536 $ this ->dispatchConfig ->getRouter ()->dispatch (function ($ data , $ args , $ middlewares ) use ($ request , $ stream ) {
3637
38+ $ dispatchCode = $ data [0 ] ?? RouterDispatcher::FOUND ;
39+
3740 [$ data , $ args , $ middlewares ] = $ this ->reMap ($ data , $ args , $ middlewares );
3841
3942 if (!isset ($ data ['handler ' ])) {
4043 throw new InvalidArgumentException ("Missing 'handler' key. " );
4144 }
4245
46+
4347 $ this ->container ->set ("request " , $ request );
4448 $ this ->container ->set ("args " , $ args );
4549 $ this ->container ->set ("configuration " , $ this ->getDispatchConfig ());
4650
4751 $ bodyStream = $ this ->getBody ($ stream );
4852 $ factory = new ResponseFactory ($ bodyStream );
53+ $ finalHandler = new ControllerRequestHandler ($ factory , $ data ['handler ' ] ?? []);
4954
50- $ finalHandler = new ControllerRequestHandler ($ factory , $ data ['handler ' ]);
5155
5256 $ response = $ this ->initRequestHandler (
5357 request: $ request ,
@@ -56,19 +60,30 @@ public function run(ServerRequestInterface $request, ?StreamInterface $stream =
5660 middlewares: $ middlewares
5761 );
5862
63+ if ($ dispatchCode === Dispatcher::NOT_FOUND ) {
64+ $ response = $ response ->withStatus (404 );
65+ }
66+
67+ if ($ dispatchCode === Dispatcher::METHOD_NOT_ALLOWED ) {
68+ $ response = $ response ->withStatus (405 );
69+ }
70+
5971 $ this ->createEmitter ()->emit ($ response , $ request );
6072 });
6173 }
6274
6375
64- function reMap ($ data , $ args , $ middlewares ) {
65-
66- if (isset ($ data [1 ]) && $ middlewares instanceof ServerRequestInterface) {
76+ function reMap ($ data , $ args , $ middlewares )
77+ {
78+ if (isset ($ data [1 ]) && $ middlewares instanceof ServerRequestInterface) {
6779 $ item = $ data [1 ];
6880 return [
6981 ["handler " => $ item ['controller ' ]], $ _REQUEST , ($ item ['data ' ] ?? [])
7082 ];
7183 }
84+ if (!is_array ($ middlewares )) {
85+ $ middlewares = [];
86+ }
7287 return [$ data , $ args , $ middlewares ];
7388 }
7489}
0 commit comments