Spec-Zone.ru › Phalcon 2

Сообщения с миганием

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

Адаптеры

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

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

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

Обычно служба Flash Messaging запрашивается из контейнера служб, если вы используете Phalcon\DI\FactoryDefault, то Phalcon\Flash\Direct автоматически регистрируется как служба «flash»:

//Set up the flash service
$di->set('flash', function() {
    return new \Phalcon\Flash\Direct();
});

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

class PostsController extends \Phalcon\Mvc\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.");

Вы можете добавить сообщения с собственными типами:

$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 к DIV-элементам. Эти классы позволяют определить графическое представление сообщений в браузере. Классы CSS можно переопределить, например, если вы используете Twitter bootstrap, классы можно настроить как:

//Register the flash service with custom CSS classes
$di->set('flash', function(){
    $flash = new \Phalcon\Flash\Direct(array(
        'error' => 'alert alert-error',
        'success' => 'alert alert-success',
        'notice' => 'alert alert-info',
    ));
    return $flash;
});

Тогда сообщения будут выводиться следующим образом:

<div class="alert alert-error">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>

Неявная очистка против сессии

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

class ContactController extends \Phalcon\Mvc\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(array("action" => "index"));
    }

}

Или используя HTTP-перенаправление:

class ContactController extends \Phalcon\Mvc\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–2016 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/2.0.0/reference/flash.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API