老司机带你深入理解 Laravel 中间件(全局中间件)

前言

不知不觉,这已经是我写的第16篇博文了,在前面的一系列博文中,我带大家深入学习了Laravel的各个模块,是为了给大家打下良好的基础,也是后面学习的必要条件。在今天的学习中,我会给大家讲解Laravel的中间件(这是Laravel中间件的第一篇,全局中间件),关于中间件如何使用,相信大家应该都没啥问题了,我就不再详述。

学习依赖

你要想看懂我下面所讲的内容,请首先阅读我前面写的下列博文:

  1. 老司机带你实现 Laravel 之管道
  2. 老司机带你深入理解 Laravel 之 Facade

如果你没看的话,你有很大的可能性,下面的内容你可能根本看不懂。

中间件定义

Laravel项目的中间件存在于如下所示目录中:

老司机带你深入理解Laravel中间件

Laravel自带的中间价都存于vendor/laravel/framework/src/illuminate/Foundation/Http/Middleware目录下面,如下:

老司机带你深入理解Laravel中间件

至于Laravel如何识别我们的中间件,则看这个文件,相信大家并不陌生:

老司机带你深入理解Laravel中间件

你一定要打开app/Http/Middleware/Kernel这个文件看一下,后面会用到。
我们来到Illuminate\Foundation\Http\Kernel文件的sendRequestThroughRouter方法,如下:

老司机带你深入理解Laravel中间件

这里使用到了Laravel的管道,这也是我为什么提醒阅读 老司机带你实现 Laravel 之管道的原因。

这个管道遍历当前对象的middleware属性,那么这个属性的值是多少呢?请看app/Http/Middleware/Kernel文件,内容如下:

老司机带你深入理解Laravel中间件

Laravel中每一个中间件都必须实现handle法,因为Laravel会调用它,这里我们以\App\Http\Middleware\CheckForMaintenanceMode::class为例,这个类的定义如下所示:

老司机带你深入理解Laravel中间件

我标出来的红色部分,它继承自Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode类,我们看它的handle如下:

老司机带你深入理解Laravel中间件

至于CheckForMaintenanceMode中间价是干啥的,大家自己去看,我就没那个兴致了,最重要的看我标出来的部分,这是Laravel管道的关键所在。

总结

上面给大家稍微梳理了一下Laravel全局中间件的代码,相信如果你理解了我之前写的几篇Laravel博文,看懂真的很简单。在下有一个qq群,有意者可以加一下:

本作品采用《CC 协议》,转载必须注明作者和本文链接
微信:okayGoHome
Dennis_Ritchie
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

大佬 TCP/IP 多线程并发编程 有么有计划啊?

4年前 评论

非常感谢大佬带着看laravel底层

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!