Сообщения Flash
Сообщения Flash используются для уведомления пользователя о состоянии действий, которые он/она совершил(а), или просто для отображения информации пользователям. Этот компонент позволяет генерировать такие сообщения.
Адаптеры
Этот компонент использует адаптеры для определения поведения сообщений после передачи их в Flasher:
| Адаптер | Описание | API |
|---|---|---|
| Прямой | Непосредственно выводит сообщения, переданные в flasher | Phalcon\Flash\Direct |
| Сессия | Временное хранение сообщений в сессии, затем сообщения могут быть выведены в следующем запросе | Phalcon\Flash\Session |
Использование
Обычно служба Flash Messaging запрашивается из контейнера сервисов. Если вы используете Phalcon\Di\FactoryDefault, то Phalcon\Flash\Direct автоматически регистрируется как сервис «flash», а Phalcon\Flash\Session — как сервис «flashSession». Вы также можете зарегистрировать его вручную:
use Phalcon\Flash\Direct as FlashDirect;
use Phalcon\Flash\Session as FlashSession;
// Set up the flash service
$di->set(
"flash",
function () {
return new FlashDirect();
}
);
// Set up the flash session service
$di->set(
"flashSession",
function () {
return new FlashSession();
}
);
Таким образом, вы можете использовать его в контроллерах или представлениях:
use Phalcon\Mvc\Controller;
class PostsController extends Controller
{
public function indexAction()
{
}
public function saveAction()
{
$this->flash->success("The post was correctly saved!");
}
}
Поддерживаются четыре встроенных типа сообщений:
$this->flash->error("too bad! the form had errors");
$this->flash->success("yes!, everything went very smoothly");
$this->flash->notice("this a very important information");
$this->flash->warning("best check yo self, you're not looking too good.");
Вы также можете добавлять сообщения со своими типами, используя метод %%%CODE_BLOCK_3%%:
$this->flash->message("debug", "this is debug message, you don't say");
Вывод сообщений
Сообщения, отправленные в службу flash, автоматически форматируются с помощью HTML:
<div class="errorMessage">too bad! the form had errors</div> <div class="successMessage">yes!, everything went very smoothly</div> <div class="noticeMessage">this a very important information</div> <div class="warningMessage">best check yo self, you're not looking too good.</div>
Как видно, CSS классы автоматически добавляются к :code:`<div>`s. Эти классы позволяют вам определить графическое представление сообщений в браузере. CSS классы могут быть переопределены, например, если вы используете Twitter Bootstrap, классы могут быть настроены как:
use Phalcon\Flash\Direct as FlashDirect;
// Register the flash service with custom CSS classes
$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">too bad! the form had errors</div> <div class="alert alert-success">yes!, everything went very smoothly</div> <div class="alert alert-info">this a very important information</div> <div class="alert alert-warning">best check yo self, you're not looking too good.</div>
Неявное сброс/Сессия
В зависимости от адаптера, используемого для отправки сообщений, он может выводить их напрямую или временно хранить сообщения в сессии для последующего отображения. Когда следует использовать каждый из них? Это обычно зависит от типа перенаправления, которое вы выполняете после отправки сообщений. Например, если вы делаете «переадресацию», нет необходимости хранить сообщения в сессии, но если вы выполняете HTTP перенаправление, то они должны быть сохранены в сессии:
use Phalcon\Mvc\Controller;
class ContactController extends Controller
{
public function indexAction()
{
}
public function saveAction()
{
// Store the post
// Using direct flash
$this->flash->success("Your information was stored correctly!");
// Forward to the index action
return $this->dispatcher->forward(
[
"action" => "index"
]
);
}
}
Или используя HTTP перенаправление:
use Phalcon\Mvc\Controller;
class ContactController extends Controller
{
public function indexAction()
{
}
public function saveAction()
{
// Store the post
// Using session flash
$this->flashSession->success("Your information was stored correctly!");
// Make a full HTTP redirection
return $this->response->redirect("contact/index");
}
}
В этом случае вам необходимо вручную вывести сообщения в соответствующем представлении:
<!-- app/views/contact/index.phtml --> <p><?php $this->flashSession->output() ?></p>
Атрибут ‘flashSession’ — это то, как flash ранее был установлен в контейнер инъекции зависимостей. Вам необходимо сначала запустить сессию сессию, чтобы успешно использовать flashSession-посредника.
© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/reference/flash.html