问题
一个路由需要用到多个中间件,其中一个是 Laravel 自带的 auth 中间件。
如果业务需要自定义中间在 auth 之前执行,还是有办法的。
解决方案
观察定义中间件的 app\\Http\\Kernel 类,是继承的 Illuminate\\Foundation\\Http\\Kernel 类。
再打开 Illuminate\\Foundation\\Http\\Kernel ,发现有这样一个数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
...
/**
* The priority-sorted list of middleware.
*
* Forces the listed middleware to always be in the given order.
*
* @var array
*/
protected $middlewarePriority = [
\\Illuminate\\Session\\Middleware\\StartSession:: class ,
\\Illuminate\\View\\Middleware\\ShareErrorsFromSession:: class ,
\\Illuminate\\Auth\\Middleware\\Authenticate:: class ,
\\Illuminate\\Session\\Middleware\\AuthenticateSession:: class ,
\\Illuminate\\Routing\\Middleware\\SubstituteBindings:: class ,
\\Illuminate\\Auth\\Middleware\\Authorize:: class ,
];
...
|
注释里写得比较清楚了:列表中的中间件会按照顺序优先在其他中间件之前执行。
那么需要自定义中间件在 auth 之前执行,只需要在 app\\Http\\Kernel 重载这个数组就行了。
auth 中间件对应的类 \\Illuminate\\Auth\\Middleware\\Authenticate,
将自定义中间件 \\App\\Http\\Middleware\\CustomMiddelware 放到这个前面就可以了:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
...
protected $middlewarePriority = [
\\Illuminate\\Session\\Middleware\\StartSession:: class ,
\\Illuminate\\View\\Middleware\\ShareErrorsFromSession:: class ,
\\App\\Http\\Middleware\\CustomMiddelware:: class ,
\\Illuminate\\Auth\\Middleware\\Authenticate:: class ,
\\Illuminate\\Session\\Middleware\\AuthenticateSession:: class ,
\\Illuminate\\Routing\\Middleware\\SubstituteBindings:: class ,
\\Illuminate\\Auth\\Middleware\\Authorize:: class ,
];
...
|
拓展
不在 $middlewarePriority 列表中的中间件,是按照在路由配置里调用的顺序来的:
在 Route::group 里定义的,先执行外层,后执行内层
在数组定义的,先执行写在数组前面的,后执行写在数组后面的
举例:
1
2
3
4
5
6
7
8
9
|
Route::group([ 'middleware' => 'outer' ], function () {
Route::group([ 'middleware' => 'inner' ], function () {
Route::group([ 'middleware' => [ 'array1' , 'array2' , 'auth:api' ]], function () {
Route::get( 'test' , function () {
return ;
});
});
});
});
|
这里就是按照 outer 、 inner 、 array1 、 array2 的顺序执行。
以上这篇基于Laravel 多个中间件的执行顺序详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。
原文链接:https://blog.csdn.net/realghost/article/details/80969253
相关文章
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-29 51
-
2025-05-27 37
-
2025-05-29 74
-
2025-05-29 61
-
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2025-05-29 87