闪存消息

最后更新于:2022-04-02 05:14:50

                        [TOC]

闪存消息

Flash消息用于向用户通知他/她所做的操作的状态,或者仅向用户显示信息。可以使用此组件生成这些类型的消息。

适配器

此组件使用适配器在传递给Flasher后定义消息的行为:

适配器 描述 API
Direct 直接输出传递给闪存器的消息 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();
    }
);
// Set up the flash session service

$di-&gt;set(
    'flashSession',
    function () {
        return  new  FlashSession();
    }
);

这样,您可以在控制器或视图中使用它:

<!--?php
use Phalcon\\Mvc\\Controller;
class PostsController extends Controller
{
    public  function indexAction()
    {
    
    }

    public  function saveAction()
    {
        $this\--->flash\-&gt;success('The post was correctly saved!');
    }
}

支持四种内置消息类型:

<!--?php

$this--->flash-&gt;error('too bad! the form had errors');
$this-&gt;flash-&gt;success('yes!, everything went very smoothly');
$this-&gt;flash-&gt;notice('this a very important information');
$this-&gt;flash-&gt;warning("best check yo self, you're not looking too good.");

您还可以使用 message() 方法添加具有您自己类型的消息:

<!--?php
$this--->flash-&gt;message('debug', "this is debug message, you don't say");

打印消息

发送到闪存服务的消息将自动使用HTML格式化:


too  bad!  the  form  had  errors

yes!, everything  went  very  smoothly

this  a  very  important  information

best  check  yo  self, you're not looking too good.

如您所见,CSS类会自动添加到 `` 中。这些类允许您在浏览器中定义消息的图形表示。可以覆盖CSS类,例如,如果您使用的是Twitter Bootstrap,则可以将类配置为:

<!--?php
use Phalcon\\Flash\\Direct as FlashDirect;

// Register the flash service with custom CSS classes

$di--->set(

    'flash',

    function () {

        $flash =  new  FlashDirect(
         [
            'error'  =&gt;  'alert alert-danger',
            'success'  =&gt;  'alert alert-success',
            'notice'  =&gt;  'alert alert-info',
            'warning'  =&gt;  'alert alert-warning',
        ]
);

return $flash;

}

);

然后消息将打印如下:


too  bad!  the  form  had  errors
yes!, everything  went  very  smoothly
this  a  very  important  information
best  check  yo  self, you're not looking too good.

隐式刷新与Session

根据用于发送消息的适配器,它可以直接生成输出,或者暂时将消息存储在会话中以便稍后显示。你应该什么时候使用?这通常取决于您在发送邮件后执行的重定向类型。例如,如果您没有必要将转发存储在会话中,但是如果您执行HTTP重定向,则需要将它们存储在会话中:


<!--?php

use Phalcon\\Mvc\\Controller;

class ContactController extends Controller
{

    public  function indexAction()
    {
    }

    public  function saveAction()

    {

    // Store the post

    // Using direct flash

    $this--->flash-&gt;success('Your information was stored correctly!');

    // Forward to the index action

    return  $this-&gt;dispatcher-&gt;forward([
        'action'  =&gt;  'index']);
    }
}

或者使用HTTP重定向:


<!--?php

use Phalcon\\Mvc\\Controller;

class ContactController extends Controller
{
    public  function indexAction() {}

    public  function saveAction(){

    // Store the post

    // Using session flash

    $this--->flashSession-&gt;success('Your information was stored correctly!');

    // Make a full HTTP redirection

    return  $this-&gt;response-&gt;redirect('contact/index');

    }

}

在这种情况下,您需要在相应的视图中手动打印消息:

flashSession-&gt;output() ?&gt;

属性 flashSession 是先前将flash设置到依赖项注入容器中的方式。您需要首先启动session才能成功使用flashSession消息。

';