From c88347614ef5729b385c45a4ef191213a1120d13 Mon Sep 17 00:00:00 2001 From: Moreau Elise <moreau.elise13@gmail.com> Date: Sun, 4 Oct 2020 19:02:43 +0200 Subject: [PATCH] add flash messages --- app/dependencies.php | 6 ++- app/routes.php | 20 ++++++-- composer.json | 1 + composer.lock | 50 ++++++++++++++++++- .../Actions/User/CreateUserAction.php | 8 +-- src/Application/Actions/User/UserAction.php | 4 +- .../Middleware/SessionMiddleware.php | 6 +-- templates/common/layout.twig | 5 ++ 8 files changed, 84 insertions(+), 16 deletions(-) diff --git a/app/dependencies.php b/app/dependencies.php index af8caff..70ef431 100644 --- a/app/dependencies.php +++ b/app/dependencies.php @@ -13,6 +13,7 @@ use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Tools\Setup; use Slim\Views\Twig; +use Slim\Flash\Messages; return function (ContainerBuilder $containerBuilder) { @@ -73,8 +74,9 @@ return function (ContainerBuilder $containerBuilder) { return $twig; }, - - + Messages::class => function (ContainerInterface $container) { + return new Messages(); + } ] ); }; diff --git a/app/routes.php b/app/routes.php index cf62c0d..3ebf2ca 100644 --- a/app/routes.php +++ b/app/routes.php @@ -23,6 +23,7 @@ use Slim\App; use Slim\Interfaces\RouteCollectorProxyInterface as Group; use Slim\Views\Twig; +use Slim\Flash\Messages; return function (App $app) { @@ -43,13 +44,24 @@ return function (App $app) { } ); - $app->get('/login', function (Request $request, Response $response) { - return $this->get(Twig::class)->render($response, "/user/log_in.twig", []); + $app->get('/map', function (Request $request, Response $response) { + return $this->get(Twig::class)->render($response, "/map/map.twig", []); } ); - $app->get('/map', function (Request $request, Response $response) { - return $this->get(Twig::class)->render($response, "/map/map.twig", []); + $app->group('/login', function (Group $group) { + $group->get('', function(Request $request, Response $response){ + if (isset($_SESSION['userId'])) { + return $response + ->withHeader('Location', '/account') + ->withStatus(302); + } + + $message = $this->get(Messages::class)->getFirstMessage('creation'); + + return $this->get(Twig::class)->render($response, "/user/log_in.twig", ["message" => $message]); + }); + $group->post('', LogInUserAction::class); } ); diff --git a/composer.json b/composer.json index ff1f2d0..c5e9a9c 100644 --- a/composer.json +++ b/composer.json @@ -27,6 +27,7 @@ "doctrine/orm": "^2.7", "monolog/monolog": "^2.1", "php-di/php-di": "^6.2", + "slim/flash": "^0.4.0", "slim/psr7": "^1.1", "slim/slim": "^4.5", "slim/twig-view": "^3.1", diff --git a/composer.lock b/composer.lock index d6dcc8a..010db60 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7387974bdd21dd35717da3f375d6af23", + "content-hash": "f987a2008db776ca427aaa7be93e9c2b", "packages": [ { "name": "doctrine/annotations", @@ -1849,6 +1849,54 @@ "description": "A polyfill for getallheaders.", "time": "2019-03-08T08:55:37+00:00" }, + { + "name": "slim/flash", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/slimphp/Slim-Flash.git", + "reference": "9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slimphp/Slim-Flash/zipball/9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc", + "reference": "9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Slim\\Flash\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "http://joshlockhart.com" + } + ], + "description": "Slim Framework Flash message service provider", + "homepage": "http://slimframework.com", + "keywords": [ + "flash", + "framework", + "message", + "provider", + "slim" + ], + "time": "2017-10-22T10:35:05+00:00" + }, { "name": "slim/psr7", "version": "1.2.0", diff --git a/src/Application/Actions/User/CreateUserAction.php b/src/Application/Actions/User/CreateUserAction.php index 62ec546..7320d26 100755 --- a/src/Application/Actions/User/CreateUserAction.php +++ b/src/Application/Actions/User/CreateUserAction.php @@ -52,10 +52,10 @@ class CreateUserAction extends UserAction $this->logger->info("User has been created."); - return $this->twig->render( - $this->response, "/user/user_profile.twig", - ["user" => $user, "id" => $user->getId()] - ); + $this->flash->addMessage('creation', 'Your account has been created. Please log in.'); + return $this->response + ->withHeader('Location', '/login') + ->withStatus(302); } /** diff --git a/src/Application/Actions/User/UserAction.php b/src/Application/Actions/User/UserAction.php index 153c815..ff9ba23 100755 --- a/src/Application/Actions/User/UserAction.php +++ b/src/Application/Actions/User/UserAction.php @@ -7,6 +7,7 @@ use App\Application\Actions\Action; use Psr\Log\LoggerInterface; use Doctrine\ORM\EntityManager; use Slim\Views\Twig; +use Slim\Flash\Messages; abstract class UserAction extends Action { @@ -19,11 +20,12 @@ abstract class UserAction extends Action * @param LoggerInterface $logger * @param UserRepository $userRepository */ - public function __construct(LoggerInterface $logger, EntityManager $em, Twig $twig) + public function __construct(LoggerInterface $logger, EntityManager $em, Twig $twig, Messages $flash) { parent::__construct($logger); $this->userRepository = $em->getRepository('App\Domain\User\User'); $this->em = $em; + $this->flash = $flash; $this->twig = $twig; diff --git a/src/Application/Middleware/SessionMiddleware.php b/src/Application/Middleware/SessionMiddleware.php index cbfc1d6..4623d7f 100755 --- a/src/Application/Middleware/SessionMiddleware.php +++ b/src/Application/Middleware/SessionMiddleware.php @@ -15,10 +15,8 @@ class SessionMiddleware implements Middleware */ public function process(Request $request, RequestHandler $handler): Response { - if (isset($_SERVER['HTTP_AUTHORIZATION'])) { - session_start(); - $request = $request->withAttribute('session', $_SESSION); - } + session_start(); + $request = $request->withAttribute('session', $_SESSION); return $handler->handle($request); } diff --git a/templates/common/layout.twig b/templates/common/layout.twig index caeec15..221c349 100644 --- a/templates/common/layout.twig +++ b/templates/common/layout.twig @@ -40,6 +40,11 @@ </div> {% endblock %} <div class="content"> + {% if message %} + <div class="ui message"> + {{message}} + </div> + {% endif %} {% block content %} {% endblock %} </div> {% block footer %} -- GitLab