当前位置:网站首页>laravel构造函数和中间件执行顺序问题
laravel构造函数和中间件执行顺序问题
2022-07-07 14:07:00 【全栈程序员站长】
今天想重构下代码结构:
BaseController.php 放置公共的中间件
class BaseController
{
public function __construct(){
$this->middleware('login');
}
}
IndexController.php 继承 BaseController
class IndexController extends BaseController
{
$user; // 存储登录用户实例
public function __construct(){
parent::__constuct();
$this->user = Auth::user();
}
}
--------------------
如上代码,一直报错!提示获取不到用户实例!
各种测试,kernel.php, route.php, BaseController, middleware写法,等等,找不到问题。甚至一度怀疑 parent::__contruct()继承不对...
最终发现,是构造函数和中间件的执行顺序有问题:
1.先执行构造函数
2.再调用中间件
所以,我的问题就是,login中间件要求用户登录,而构造函数又先执行了,直接获取用户信息,还未登录呢!
百度发现一篇文章,描述了这个问题:
https://laravel-china.org/topics/3218/laravel53-middleware-and-controller-construction-method-execution-sequence-problem
/*
它里面提到了一句:
不可在构造函数中,直接获取到session变量或认证后的用户实例!因为中间件还未启动!
这个描述的不准确!
在用户登录后,构造函数中,自然就获取到session变量或认证后的用户实例!
主要还是中间件未在之前执行!说白了就是顺序的问题!
*/
解决方法:
都只能在route.php 中了
1>要么使用 route::get()->middle('login')
2>要么使用 route::get(['middleware' => 'login', xxx])
最好的方法,应该是使用路由组 route::group(['middleware' => 'login'])
或者是:
抛弃在控制器中使用用户实例
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113214.html原文链接:https://javaforall.cn
边栏推荐
- 如何在shell中实现 backspace
- A link opens the applet code. After compilation, it is easy to understand
- Wireless sensor networks -- ZigBee and 6LoWPAN
- Iptables only allows the specified IP address to access the specified port
- SPI master RX time out interrupt
- JS array foreach source code parsing
- Three. JS introductory learning notes 11:three JS group composite object
- Leetcode-136-只出现一次的数(用异或来解答)
- Notification uses full resolution
- Bidding announcement: 2022 Yunnan Unicom gbase database maintenance public comparison and selection project (second) comparison and selection announcement
猜你喜欢
喜讯!科蓝SUNDB数据库与鸿数科技隐私数据保护管理软件完成兼容性适配
You Yuxi, coming!
Application example of infinite list [uigridview]
Enterprise log analysis system elk
Three. JS introductory learning notes 19: how to import FBX static model
The unity vector rotates at a point
Three. JS introductory learning notes 03: perspective projection camera
谈谈 SAP iRPA Studio 创建的本地项目的云端部署问题
It's different for rich people to buy a house
Strengthen real-time data management, and the British software helps the security construction of the medical insurance platform
随机推荐
应用程序和matlab的通信方式
10 schemes to ensure interface data security
模仿企业微信会议室选择
Continuous creation depends on it!
SPI master RX time out interrupt
Application example of infinite list [uigridview]
分步式監控平臺zabbix
numpy--疫情数据分析案例
Enterprise log analysis system elk
Performance measure of classification model
leetcode 241. Different ways to add parentheses design priority for operational expressions (medium)
招标公告:2022年云南联通gbase数据库维保公开比选项目(第二次)比选公告
AE learning 02: timeline
一个普通人除了去工厂上班赚钱,还能干什么工作?
融云斩获 2022 中国信创数字化办公门户卓越产品奖!
【花雕体验】15 尝试搭建Beetle ESP32 C3之Arduino开发环境
Apache Doris刚“毕业”:为什么应关注这种SQL数据仓库?
Vs tool word highlight with margin
2022山东智慧养老展,适老穿戴设备展,养老展,山东老博会
What about the pointer in neural network C language