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