diff --git a/public/index.php b/public/index.php index abf0d72..17bc652 100644 --- a/public/index.php +++ b/public/index.php @@ -17,4 +17,7 @@ $router->get('/^news\/(?\d+)$/', [$user, 'viewPost']); $router->get('/^comments\/(?[\w-]+)$/', [$user, 'viewPostComments']); $router->match('/^login$/', [$security, 'login']); $router->match('/^register$/', [$security, 'register']); -$router->run(new \Silex\DI\DI($router))->render($router, __DIR__ . '/../' . VIEW_PATH); +$router->match('/^logout$/', [$security, 'logout']); + +$di = new \Silex\DI\DI($router); +$router->run($di)->render($di, __DIR__ . '/../' . VIEW_PATH); diff --git a/src/Silex/Controller/SecurityController.php b/src/Silex/Controller/SecurityController.php index a2f8ba4..30dbd3d 100644 --- a/src/Silex/Controller/SecurityController.php +++ b/src/Silex/Controller/SecurityController.php @@ -16,9 +16,7 @@ class SecurityController if ($_SERVER['REQUEST_METHOD'] === 'POST') { $success = $di->getSecurity()->initLogin($_POST['login'], $_POST['password']); if ($success) { - http_response_code(303); - header('Location: ' . $di->getRouter()->url('')); - exit(); + HttpResponse::redirect($di->getRouter()->url('')); } $fail = !$success; } @@ -31,12 +29,16 @@ class SecurityController if ($_SERVER['REQUEST_METHOD'] === 'POST') { $user = $di->getSecurity()->register(User::fromRawPassword($_POST['login'], $_POST['password'])); if ($user !== null) { - http_response_code(303); - header('Location: ' . $di->getRouter()->url('')); - exit(); + HttpResponse::redirect($di->getRouter()->url('')); } $fail = $user === null; } return HttpResponse::found('register', ['fail' => $fail]); } + + public function logout(DI $di): void + { + $di->getSecurity()->logout(); + HttpResponse::redirect($di->getRouter()->url('')); + } } diff --git a/src/Silex/Http/HttpResponse.php b/src/Silex/Http/HttpResponse.php index 113d9cf..41433f6 100644 --- a/src/Silex/Http/HttpResponse.php +++ b/src/Silex/Http/HttpResponse.php @@ -4,7 +4,7 @@ declare(strict_types=1); namespace Silex\Http; -use Silex\Router\Router; +use Silex\DI\DI; class HttpResponse { @@ -21,13 +21,22 @@ class HttpResponse $this->viewParams = $viewParams; } + public static function redirect(string $url): void + { + http_response_code(303); + header('Location: ' . $url); + exit(); + } + public static function found(string $viewPath, array $viewParams = []): HttpResponse { return new HttpResponse(200, $viewPath, $viewParams); } - public function render(Router $router, string $viewBasePath) + public function render(DI $di, string $viewBasePath) { + $router = $di->getRouter(); + $security = $di->getSecurity(); $params = $this->viewParams; ob_start(); require $viewBasePath . '/' . $this->viewPath . '.php'; diff --git a/views/layout.php b/views/layout.php index 838c7f2..f360250 100644 --- a/views/layout.php +++ b/views/layout.php @@ -10,16 +10,23 @@