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

Адаптеры

Этот компонент использует адаптеры для определения поведения сообщений после передачи в Flasher:

АдаптерОписаниеAPI
Direct Непосредственно выводит сообщения, переданные в Flasher Phalcon\Flash\Direct
Session Временно сохраняет сообщения в сеансе, затем сообщения могут быть напечатаны в следующем запросе Phalcon\Flash\Session

Использование

Обычно служба Flash-сообщений запрашивается из контейнера служб. Если вы используете Phalcon\Di\FactoryDefault, то Phalcon\Flash\Direct автоматически регистрируется как служба flash, а Phalcon\Flash\Session автоматически регистрируется как служба flashSession. Вы также можете вручную зарегистрировать его:

<?php

use Phalcon\Flash\Direct as FlashDirect;
use Phalcon\Flash\Session as FlashSession;

// Настройка службы всплывающих сообщений
$di->set(
    'flash',
    function () {
        return new FlashDirect();
    }
);

// Настройка службы флэш-сессии
$di->set(
    'flashSession',
    function () {
        return new FlashSession();
    }
);

Таким образом, вы можете использовать его в контроллерах или представлениях:

<?php

use Phalcon\Mvc\Controller;

class PostsController extends Controller
{
    public function indexAction()
    {

    }

    public function saveAction()
    {
        $this->flash->success('Пост был правильно сохранен!');
    }
}

Поддерживается четыре встроенных типа сообщений:

<?php

$this->flash->error('очень плохо! у формы были ошибки');

$this->flash->success('да !, все прошло очень гладко');

$this->flash->notice('это очень важная информация');

$this->flash->warning("лучше проверить себя, вы не выглядите слишком хорошо.");

Вы также можете добавлять сообщения с вашими собственными типами с помощью метода message():

<?php

$this->flash->message('debug', "это сообщение отладки, вы не говорите");

Печать Сообщений

Сообщения, отправляемые в службу flash, автоматически форматируются в формате HTML:

<div class='errorMessage'>очень жаль! в форме были ошибки</div>

<div class='successMessage'>да! все прошло очень гладко</div>

<div class='noticeMessage'>это очень важная информация</div>

<div class='warningMessage'>лучше проверь себя, ты выглядишь не слишком хорошо.</div>

Как вы можете видеть, классы CSS добавляются автоматически в <div>. Эти классы позволяют определить графическое представление сообщений в браузере. Классы CSS могут быть переопределены, например, если вы используете Twitter Bootstrap, классы могут быть настроены как:

<?php

use Phalcon\Flash\Direct as FlashDirect;

// Регистрация службы flash с помощью пользовательских классов CSS
$di->set(
    'flash',
    function () {
        $flash = new FlashDirect(
            [
                'error'   => 'alert alert-danger',
                'success' => 'alert alert-success',
                'notice'  => 'alert alert-info',
                'warning' => 'alert alert-warning',
            ]
        );

        return $flash;
    }
);

Затем сообщения будут напечатаны следующим образом:

<div class='alert alert-danger'>очень жаль! в форме были ошибки</div>

<div class='alert alert-success'>да! все прошло очень гладко</div>

<div class='alert alert-info'>это очень важная информация</div>

<div class='alert alert-warning'>лучше проверь себя, ты выглядишь не слишком хорошо.</div>

Неявный сброс и сеанс

В зависимости от адаптера, используемого для отправки сообщений, он может производить вывод непосредственно или временно хранить сообщения в сеансе, который будет показан позже. Когда вы должны использовать каждый? Обычно это зависит от типа перенаправления, выполняемого после отправки сообщений. Например, если вы делаете переадресацию, не обязательно хранить сообщения в сеансе, но если вы делаете перенаправление HTTP, то они должны быть сохранены в сеансе:

<?php

use Phalcon\Mvc\Controller;

class ContactController extends Controller
{
    public function indexAction()
    {

    }

    public function saveAction()
    {
        // Хранить сообщение

        // Используя прямой flash
        $this->flash->success('Ваша информация была сохранена правильно!');

        // Вперед к действию индекса
        return $this->dispatcher->forward(
            [
                'action' => 'index'
            ]
        );
    }
}

Или с помощью перенаправления HTTP:

<?php

use Phalcon\Mvc\Controller;

class ContactController extends Controller
{
    public function indexAction()
    {

    }

    public function saveAction()
    {
        // Store the post

        // Использование сеанса flash
        $this->flashSession->success('Ваша информация была сохранена правильно!');

        // Сделать полное перенаправление HTTP
        return $this->response->redirect('contact/index');
    }
}

В этом случае необходимо вручную распечатать сообщения в соответствующем представлении:

<!-- app/views/contact/index.phtml -->

<p><?php $this->flashSession->output() ?></p>

Атрибут flashSession -это то, как flash был ранее установлен в контейнер внедрения зависимостей. Вам нужно, чтобы начать первую сессию успешно использовать flashSession посланник.