parent
6282694da2
commit
faf188c951
@ -0,0 +1,69 @@ |
||||
<?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']); |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue