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 посланник.