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; } }