如何在CakePHP 3中检查Flash消息是否存在?
在CakePHP 3中实现Flash消息存在性检查的方法
嘿,刚好我对CakePHP 3的Flash消息机制比较熟悉,这就给你拆解怎么实现类似Yii里的hasFlash和getFlash功能!
首先明确:CakePHP 3的Flash消息默认存储在Session中,所以检查消息是否存在本质是检查Session中对应键值是否存在,而获取并清除消息则可以借助Flash组件的渲染方法。
第一步:控制器中设置Flash消息
先看控制器里怎么设置带指定key的Flash消息(和Yii里指定消息标识对应):
// 比如在控制器的动作里,操作成功时设置Flash if ($something->save()) { // 设置key为success的Flash消息,可自定义模板元素 $this->Flash->set('数据保存成功!', [ 'key' => 'success', 'element' => 'Flash/success' // 可选,用自定义的视图模板渲染消息 ]); return $this->redirect(['action' => 'index']); }
如果用快捷方法的话,也可以这样写(默认key就是方法名):
$this->Flash->success('数据保存成功!'); // 等价于上面的set方法,key自动设为success
第二步:视图中检查并渲染Flash消息
这就是核心的“存在性检查”部分了,对应Yii里的hasFlash:
<?php // 检查Session中是否存在key为success的Flash消息 if ($this->request->getSession()->check('Flash.success')): ?> <div class="alert alert-success"> <!-- 渲染并清除该Flash消息,对应Yii的getFlash --> <?= $this->Flash->render('success') ?> </div> <?php endif; ?>
补充说明
$this->request->getSession()->check('Flash.success'):严格检查指定key的Flash消息是否存在,和Yii的hasFlash('success')作用完全一致。$this->Flash->render('success'):不仅会输出消息内容,还会自动从Session中移除这条消息(和Yii的getFlash一样,都是一次性获取)。- 如果只是想读取消息但不清除,可以用
$this->request->getSession()->read('Flash.success'),但不推荐这么做,因为消息会留在Session中导致下次页面还会显示。
内容的提问来源于stack exchange,提问作者Zlatan Omerović
相关产品推荐
相关产品推荐

