0

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

1 回答 1

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

于 2013-05-17T16:50:21.830 回答