|
|
|
@ -1,27 +1,37 @@
|
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Controller;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
use App\Controller\UserController;
|
|
|
|
|
|
|
|
|
|
use AltoRouter;
|
|
|
|
|
use App\Controller\ErrorController;
|
|
|
|
|
use App\Http\HttpCodes;
|
|
|
|
|
use App\Http\JsonHttpResponse;
|
|
|
|
|
use App\Http\ViewHttpResponse;
|
|
|
|
|
use App\Validation\ValidationFail;
|
|
|
|
|
use Twig\Loader\FilesystemLoader;
|
|
|
|
|
|
|
|
|
|
class FrontController{
|
|
|
|
|
|
|
|
|
|
private AltoRouter $router;
|
|
|
|
|
private UserControler $userControler;
|
|
|
|
|
private ?UserController $userController;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function __construct(AltoRouter $router){
|
|
|
|
|
$this->router = $router;
|
|
|
|
|
$this->userController = new UserController();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function main() {
|
|
|
|
|
$this->toRoute();
|
|
|
|
|
public function run() {
|
|
|
|
|
$this->route();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function toRoute(){
|
|
|
|
|
$this->router->map("GET", "/", fn() => $this->userControler->home());
|
|
|
|
|
public function route()
|
|
|
|
|
{
|
|
|
|
|
$this->router->map("GET", "/", fn() => $this->userController->home());
|
|
|
|
|
// $router->map("GET", "/", fn() => $sampleFormController->displayFormReact());
|
|
|
|
|
// $router->map("POST", "/submit", fn() => $sampleFormController->submitFormReact($_POST));
|
|
|
|
|
// $router->map("GET", "/twig", fn() => $sampleFormController->displayFormTwig());
|
|
|
|
@ -33,13 +43,30 @@ class FrontController{
|
|
|
|
|
$match = $this->router->match();
|
|
|
|
|
|
|
|
|
|
if ($match == null) {
|
|
|
|
|
http_response_code(404);
|
|
|
|
|
$loader = new FilesystemLoader('../src/Views/');
|
|
|
|
|
$twig = new \Twig\Environment($loader);
|
|
|
|
|
http_response_code(HttpCodes::NOT_FOUND);
|
|
|
|
|
ErrorController::displayFailures([ValidationFail::notFound("Cette page n'existe pas")], $twig);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
$this->routeByResponseType($match);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function routeByResponseType(array $match)
|
|
|
|
|
{
|
|
|
|
|
$response = call_user_func_array($match['target'], $match['params']);
|
|
|
|
|
http_response_code($response->getCode());
|
|
|
|
|
if ($response instanceof ViewHttpResponse) {
|
|
|
|
|
|
|
|
|
|
$this->displayByViewKind($response);
|
|
|
|
|
|
|
|
|
|
} else if ($response instanceof JsonHttpResponse) {
|
|
|
|
|
header('Content-type: application/json');
|
|
|
|
|
echo $response->getJson();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function displayByViewKind(ViewHttpResponse $response){
|
|
|
|
|
$file = $response->getFile();
|
|
|
|
|
$args = $response->getArguments();
|
|
|
|
|
|
|
|
|
@ -52,20 +79,13 @@ class FrontController{
|
|
|
|
|
$loader = new FilesystemLoader('../src/Views/');
|
|
|
|
|
$twig = new \Twig\Environment($loader);
|
|
|
|
|
$twig->display($file, $args);
|
|
|
|
|
} catch (\Twig\Error\RuntimeError|\Twig\Error\SyntaxError $e) {
|
|
|
|
|
} catch (\Twig\Error\RuntimeError | \Twig\Error\SyntaxError $e) {
|
|
|
|
|
http_response_code(500);
|
|
|
|
|
echo "There was an error rendering your view, please refer to an administrator.\nlogs date: " . date("YYYD, d M Y H:i:s");
|
|
|
|
|
throw e;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else if ($response instanceof JsonHttpResponse) {
|
|
|
|
|
header('Content-type: application/json');
|
|
|
|
|
echo $response->getJson();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
http_response_code($response->getCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|