PHP 8.4+ Framework
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.
 
 
CodeHydrater/src/classes/http/route_service_provider.php

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']);
}
});
}
}