Skip to content

Commit a49fe36

Browse files
committed
feat: implementing status control
1 parent 63ad2d7 commit a49fe36

2 files changed

Lines changed: 25 additions & 7 deletions

File tree

src/ControllerRequestHandler.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
namespace MaplePHP\Emitron;
33

44

5+
use FastRoute\Dispatcher;
56
use MaplePHP\Container\Reflection;
7+
use MaplePHP\Core\Router\RouterDispatcher;
68
use Psr\Http\Message\ResponseFactoryInterface;
79
use Psr\Http\Message\ResponseInterface;
810
use Psr\Http\Message\ServerRequestInterface;
@@ -18,6 +20,7 @@ public function __construct(
1820
public function handle(ServerRequestInterface $request): ResponseInterface
1921
{
2022
$response = $this->factory->createResponse();
23+
2124
$this->appendInterfaces([
2225
"ResponseInterface" => $response,
2326
]);
@@ -51,7 +54,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface
5154
return $result;
5255
}
5356

54-
// If controller didn’t return a response, you can decide a convention:
57+
// If controller didn’t return a response:
5558
// - treat it as “controller wrote to $response->getBody() somewhere”
5659
// - or treat non-response as error
5760
return $response;

src/Kernel.php

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
namespace MaplePHP\Emitron;
1616

17-
use MaplePHP\Container\Reflection;
17+
use FastRoute\Dispatcher;
18+
use MaplePHP\Core\Router\RouterDispatcher;
1819
use MaplePHP\Http\ResponseFactory;
19-
use Psr\Http\Message\ResponseInterface;
2020
use Psr\Http\Message\ServerRequestInterface;
2121
use Psr\Http\Message\StreamInterface;
2222
use 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

Comments
 (0)