Зарегистрируйтесь, чтобы продолжить обучение

Flash Веб-разработка на PHP

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

Flash Message

В веб-разработке такое сообщение называют 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();

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

  • 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. Установите и подключите пакет для вывода флеш, используя примеры из теории

  2. Добавьте реализацию вывода флеш-сообщения при создании пользователя

    Flash сообщение об успешном создании пользователия

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»