老司机带你深入理解 Laravel 中间件(全局中间件)
前言
不知不觉,这已经是我写的第16篇博文了,在前面的一系列博文中,我带大家深入学习了Laravel的各个模块,是为了给大家打下良好的基础,也是后面学习的必要条件。在今天的学习中,我会给大家讲解Laravel的中间件(这是Laravel中间件的第一篇,全局中间件),关于中间件如何使用,相信大家应该都没啥问题了,我就不再详述。
学习依赖
你要想看懂我下面所讲的内容,请首先阅读我前面写的下列博文:
如果你没看的话,你有很大的可能性,下面的内容你可能根本看不懂。
中间件定义
Laravel项目的中间件存在于如下所示目录中:
Laravel自带的中间价都存于vendor/laravel/framework/src/illuminate/Foundation/Http/Middleware目录下面,如下:
至于Laravel如何识别我们的中间件,则看这个文件,相信大家并不陌生:
你一定要打开app/Http/Middleware/Kernel
这个文件看一下,后面会用到。
我们来到Illuminate\Foundation\Http\Kernel
文件的sendRequestThroughRouter
方法,如下:
这里使用到了Laravel的管道,这也是我为什么提醒阅读 老司机带你实现 Laravel 之管道的原因。
这个管道遍历当前对象的middleware属性,那么这个属性的值是多少呢?请看app/Http/Middleware/Kernel
文件,内容如下:
Laravel中每一个中间件都必须实现handle
法,因为Laravel会调用它,这里我们以\App\Http\Middleware\CheckForMaintenanceMode::class
为例,这个类的定义如下所示:
我标出来的红色部分,它继承自Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode
类,我们看它的handle
如下:
至于CheckForMaintenanceMode
中间价是干啥的,大家自己去看,我就没那个兴致了,最重要的看我标出来的部分,这是Laravel管道的关键所在。
总结
上面给大家稍微梳理了一下Laravel全局中间件的代码,相信如果你理解了我之前写的几篇Laravel博文,看懂真的很简单。在下有一个qq群,有意者可以加一下:
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: