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



我已经将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;
}

就CakePHP而言,您所做的是重新发明轮子。

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

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

然后在elements中创建一个元素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

最新更新