yii2 - 让所有控制器中的每个函数在执行函数之前执行一些代码,而不在 Yii2 中的每个函数中添加代码
问题描述
我有一个用于检查Yii2中是否存在会话 isset的代码,我在控制器的函数中添加了代码,这是代码
if(!isset($session['selectedMonth'])){
return $this->redirect(['select-period/month']);
return false;
}
我在 10 个控制器中有超过 50 个函数,我希望每个函数都使用该代码,如果不将代码一个一个地放入每个函数中,我该如何实现?
解决方案
您可以为您的应用程序创建基本控制器,并从中扩展所有其他控制器。然后你可以beforeAction()
在这个基本控制器中添加方法,这样它就会被所有从基本控制器继承的控制器使用:
public function beforeAction($action) {
// initialize $session here
if(!isset($session['selectedMonth'])){
Yii::$app->response->redirect(['select-period/month']);
return false;
}
return parent::beforeAction($action);
}
推荐阅读
- jenkins - Jenkins - 将 env var 设置为命令的输出?
- r - 从R中的大栅格创建多边形
- aws-fargate - ResourceInitializationError:无法验证记录器参数::信号:已杀死
- angular - 我可以使用应用程序模块中的惰性模块提供的服务吗
- angular - ngOnInit 变量不会出现在模板端
- python - 优化组合算法的复杂度
- javascript - Cannon.js 有没有办法检查一个对象是否同时与其他 2 个对象发生碰撞?
- c++ - 如何使用 Eigen 在 Matrix 块上构造一个方便的迭代器
- excel - 从数据模型创建的电子邮件数据透视表
- angular - 无法从 Three.js 示例导入(“three/examples/jsm/loaders/OBJLoader2”的脚本错误)