63 lines
1.4 KiB
PHP
63 lines
1.4 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Core;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* NovaCore Middleware Pipeline
|
||
|
|
* Stackable middleware system
|
||
|
|
*/
|
||
|
|
class Middleware
|
||
|
|
{
|
||
|
|
private array $middlewares = [];
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Add middleware to stack
|
||
|
|
*/
|
||
|
|
public function add($middleware): void
|
||
|
|
{
|
||
|
|
$this->middlewares[] = $middleware;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Run middleware pipeline
|
||
|
|
*/
|
||
|
|
public function run(string $method, string $uri): void
|
||
|
|
{
|
||
|
|
$index = 0;
|
||
|
|
$this->executeMiddleware($index, $method, $uri);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Execute middleware recursively
|
||
|
|
*/
|
||
|
|
private function executeMiddleware(int &$index, string $method, string $uri): void
|
||
|
|
{
|
||
|
|
if ($index >= count($this->middlewares)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
$middleware = $this->middlewares[$index++];
|
||
|
|
|
||
|
|
if (is_string($middleware)) {
|
||
|
|
$middleware = new $middleware();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (is_object($middleware) && method_exists($middleware, 'handle')) {
|
||
|
|
$middleware->handle($method, $uri, function () use (&$index, $method, $uri) {
|
||
|
|
$this->executeMiddleware($index, $method, $uri);
|
||
|
|
});
|
||
|
|
} else {
|
||
|
|
// Continue to next middleware
|
||
|
|
$this->executeMiddleware($index, $method, $uri);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Get all registered middlewares
|
||
|
|
*/
|
||
|
|
public function getMiddlewares(): array
|
||
|
|
{
|
||
|
|
return $this->middlewares;
|
||
|
|
}
|
||
|
|
}
|