Работая на Хекслете вы не раз видели сообщение о результатах выполнения любого действия — будь то аутентификация, регистрация или вступление в курс.

Flash
Message

В веб-разработке такое сообщение называют Flash. Оно обычно используется после перенаправления для индикации успешности или неудачи предыдущего действия. Flash-сообщения используют механизм сессий, который мы пока не рассматривали. Этот механизм позволяет хранить информацию между разными запросами одного и того же пользователя. В свою очередь механизм сессий работает благодаря кукам и встроен в PHP. Подробнее о сессиях мы поговорим в соответствующем уроке, а пока используем его без погружения.

<?php

use DI\Container;
use Slim\Factory\AppFactory;

// Старт PHP сессии
session_start();

$container = new Container();
$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->withStatus(302)->withHeader('Location', '/bar');
});

$app->get('/bar', function ($req, $res, $args) {
    // Извлечение flash сообщений установленных на предыдущем запросе
    $messages = $this->get('flash')->getMessages();
    print_r($messages);
});

$app->run();

В многих фреймворках типы флеш-сообщений стандартизированы. В основном используют следующие:

  • success – для удачно завершившихся действий
  • warning – для предупреждений
  • error – в тех ситуациях когда произошла ошибка

Флеш-сообщения передаются в шаблон и там выводятся. После их извлечения хранилище обнуляется. При следующем запросе 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'
    ]
]

Под капотом у флеш-сообщений используются сессии, которые рассматриваются в курсе чуть позже. Благодаря этому механизму, сайт запоминает конкретного пользователя и его сообщение.

Самостоятельная работа

  1. Добавьте вывод флеш сообщения при создании пользователя
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →