Работая на Хекслете вы не раз видели сообщение о результатах выполнения любого действия — будь то аутентификация, регистрация или вступление в курс.
В веб-разработке такое сообщение называют Flash. Оно обычно используется после перенаправления для индикации успешности или неудачи предыдущего действия. Flash-сообщения используют механизм сессий, который мы пока не рассматривали. Этот механизм позволяет хранить информацию между разными запросами одного и того же пользователя. В свою очередь механизм сессий работает благодаря кукам и встроен в PHP. Подробнее о сессиях мы поговорим в соответствующем уроке, а пока используем его без погружения.
Сначала установим необходимый пакет:
composer require slim/flash
Теперь подключим к проекту:
<?php
use DI\Container;
use Slim\Factory\AppFactory;
// Старт PHP сессии
session_start();
$container = new Container();
$container->set('renderer', function () {
return new \Slim\Views\PhpRenderer(__DIR__ . '/../templates');
});
$container->set('flash', function () {
return new \Slim\Flash\Messages();
});
AppFactory::setContainer($container);
$app = AppFactory::create();
$app->get('/foo', function ($req, $res) {
// Добавление флеш-сообщения. Оно станет доступным на следующий HTTP-запрос.
// 'success' — тип флеш-сообщения. Используется при выводе для форматирования.
// Например можно ввести тип success и отражать его зелёным цветом (на Хекслете такого много)
$this->get('flash')->addMessage('success', 'This is a message');
return $res->withRedirect('/bar');
});
$app->get('/bar', function ($req, $res) {
// Извлечение flash сообщений установленных на предыдущем запросе
$messages = $this->get('flash')->getMessages();
print_r($messages); // => ['success' => ['This is a message']]
$params = ['flash' => $messages];
return $this->get('renderer')->render($res, 'bar.phtml', $params);
});
$app->run();
В многих фреймворках типы флеш-сообщений стандартизированы. В основном используют следующие:
Флеш-сообщения передаются в шаблон и там выводятся. После их извлечения хранилище обнуляется. При следующем запросе getMessages()
вернёт пустой массив. Другими словами флеш сообщения показываются только на один запрос. После обновления страницы или перехода в другое место они пропадают. Это удобно, так как не нужно следить за их жизненным циклом.
Флеш-сообщений можно добавить сразу много, поэтому getMessages()
возвращает вложенный массив такой структуры:
<?php
// $this->get('flash')->addMessage('success', 'first message');
// $this->get('flash')->addMessage('success', 'second message');
// $this->get('flash')->addMessage('error', 'first message');
// $this->get('flash')->addMessage('error', 'another message');
[
'success' => [
'first message',
'second message',
],
'error' => [
'first message',
'another message'
]
]
Под капотом у флеш-сообщений используются сессии, которые рассматриваются в курсе чуть позже. Благодаря этому механизму, сайт запоминает конкретного пользователя и его сообщение.
Установите и подключите пакет для вывода флеш используя примеры из теории
Добавьте реализацию вывода флеш сообщения при создании пользователя
Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт