正常情况下addFlash()添加的内容会在getFlash()之后被销毁,然而这两天在将 YII_ENV 参数配置为 prod(web/index.php : defined('YII_ENV') or define('YII_ENV', 'prod');)
之后发现自动销毁失效,添加的内容会一直存在,后来逐步检查,进一步发现是问题出在config/web.php:
if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = 'yii\debug\Module';
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
#'password' => 'gii',
'allowedIPs' => ['127.0.0.1', '10.0.0.*', '*.*.*.*'] // 按需调整这里
];
}
prod模式下没有加载debug模块,在手动加载debug模块之后,flash的销毁恢复正常。
即 启用这两行代码:
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = 'yii\debug\Module';
找了半天没发现debug module 和 flsah,session之间有什么关系,不理解,不科学,故求助各位~~
flash
内容存储在session
中, 和debug module
没什么关系.addFlash('a', 'b')
之后, 再getFlash('a')
之后, 是可以销毁这条消息.
但是 : 是在下次请求中销毁, 本次请求的后续处理中还存在.
在vendor\yiisoft\yii2\web\Session.php中是有两处调用$this->updateFlashCounters();的,我在慕课网看的yii电商教程老师给的代码少了一行,就导致getFlash一直能够获取值