02 Всплывающие сообщения
Всплывающие сообщения используются для уведомления Пользователя о состоянии совершенных им действий или просто для отображения информации пользователям. Эти виды сообщений могут быть сгенерированы с помощью этого компонента.
Адаптеры
Этот компонент использует адаптеры для определения поведения сообщений после передачи в 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
посланник.