我已将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;
}
答案 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()?>
以下是官方文档中详细介绍的部分: