You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.3 KiB
69 lines
2.3 KiB
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* @author Robert Strutts <Bob_586@Yahoo.com>
|
|
* @copyright (c) 2025, Robert Strutts
|
|
* @license MIT
|
|
*/
|
|
|
|
namespace CodeHydrater\http;
|
|
|
|
use \CodeHydrater\http\service_provider as ServiceProvider;
|
|
use \CodeHydrater\http\kernel as Kernel;
|
|
use \CodeHydrater\http\request as Request;
|
|
use \CodeHydrater\http\response as Response;
|
|
use \CodeHydrater\router as Router;
|
|
use \CodeHydrater\app as App;
|
|
|
|
/**
|
|
* Description of route_service_provider
|
|
* Setup Router and Controllers
|
|
*
|
|
* @author Robert Strutts <Bob_586@Yahoo.com>
|
|
*/
|
|
class route_service_provider extends ServiceProvider {
|
|
|
|
protected Kernel $kernel;
|
|
|
|
public function __construct(Kernel $kernel) {
|
|
$this->kernel = $kernel;
|
|
}
|
|
|
|
private function build($handler, $response, $request, $next, $controller_middleware) {
|
|
// Build middleware stack
|
|
$middleware_stack = array_reduce(
|
|
array_reverse($controller_middleware),
|
|
function ($next, $middleware) {
|
|
return function ($request, $response) use ($next, $middleware) {
|
|
if ($middleware !== null ) {
|
|
$instance = new $middleware();
|
|
return $instance($request, $response, $next);
|
|
}
|
|
};
|
|
},
|
|
function ($request, $response) use ($handler) {
|
|
$response->set_content($handler->get_content());
|
|
return $response;
|
|
}
|
|
);
|
|
return $middleware_stack($request, $response);
|
|
}
|
|
|
|
public function register(): void {
|
|
// Add router middleware
|
|
$this->kernel->add_middleware(function (Request $request, Response $response, $next) {
|
|
$returned_route = Router::execute($request, $response);
|
|
if ($returned_route["found"] === false) {
|
|
$app = new App($request, $response);
|
|
$returned = $app->load_controller();
|
|
$a_middleware = $returned['middleware'] ?? [];
|
|
$data = $returned['data'] ?? "";
|
|
return $this->build($data, $response, $request, $next, $a_middleware);
|
|
} else {
|
|
return $this->build($returned_route['returned'], $response, $request, $next, $returned_route['middleware']);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|