检测cakephp中的核心flash消息是错误还是成功消息

时间:2013-05-17 16:27:24

标签: cakephp

我已将SesionHelper从核心复制到myapp / View / Helper中,因此我可以改变输出消息的div结构。

我的问题是我似乎无法从默认的cakephp消息中检测到消息是错误还是成功消息。我知道我可以在控制器中设置flash消息并添加属性。但是,似乎没有任何额外的数据可以从核心消息中看到。

示例如果数据保存到数据库我希望将消息显示为绿色。或者,如果数据无法保存,则显示为红色消息。

public function flash($key = 'flash', $attrs = array()) {
    $out = false;

    if (CakeSession::check('Message.' . $key)) {
        $flash = CakeSession::read('Message.' . $key);
        $message = $flash['message'];
        unset($flash['message']);

        if (!empty($attrs)) {
            $flash = array_merge($flash, $attrs);
        }

        if ($flash['element'] === 'default') {
            $class = 'message';
            if (!empty($flash['params']['class'])) {
                $class = $flash['params']['class'];
            }
            $out = '<div id="' . $key . 'Message" class="' . $class . '">' . $message . '</div>';
        } elseif (!$flash['element']) {
            $out = $message;
        } else {
            $options = array();
            if (isset($flash['params']['plugin'])) {
                $options['plugin'] = $flash['params']['plugin'];
            }
            $tmpVars = $flash['params'];
            $tmpVars['message'] = $message;
            $out = $this->_View->element($flash['element'], $tmpVars, $options);
        }
        CakeSession::delete('Message.' . $key);
    }
    return $out;
}

1 个答案:

答案 0 :(得分:4)

就CakePHP而言,你正在做的是重新发明轮子。

在控制器方法中设置flash消息时,可以将元素指定为第二个参数:

$this->Session->setFlash('Your record has been saved', 'flash_success');

然后在元素中创建一个元素Element / flash_success.ctp,如下所示:

<div class="alert-success"><?php echo $message;?></div>

最后在你看来:

<?php echo $this->Session->flash()?>

以下是官方文档中详细介绍的部分:

http://book.cakephp.org/2.0/en/core-libraries/components/sessions.html#creating-notification-messages