老司机带你深入理解 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 协议》,转载必须注明作者和本文链接
 
           Dennis_Ritchie 的个人博客
 Dennis_Ritchie 的个人博客
         
             
             
             
             
             
             
             
             
             
             
                     
                     
             
             
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: