浅谈Laravel中的三种中间件的作用


Posted in PHP onOctober 13, 2019

在之前一直简单的认为中间件就是往middleware里添加中间件即可。现在才知道中间件有三种类型,分别为:$middleware $middlewareGroup $routeMiddleware 通过查阅资料,终于明白了这三种类型的作用和不同。

第一种,全局中间件/$middleware:

我们的每一次请求,这里面的每个中间件都会执行。

第二种,路由中间件/$routeMiddleware:

定义在该属性内的中间件,只能在定义路由的时候引用。

假设这是我们定义的路由中间件:

protected $routeMiddleware = [
 ...
 'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
];

如果我们要使用\Illuminate\Auth\Middleware\Authenticate::class这个中间件就应该这样来写:

Route::get('hello/laravel-china','XXController@index')->middleware('auth');

定义路由时候调用middleware方法,参数值是auth, 这样访问这个路由的时候,就会执行该中间件。

第三种,中间件组/$middlewareGroups:

看上边的路由中间件,我们可以感觉到这样添加路由中间件是很麻烦的事,如果我们要执行100个中间件,那就要在定义路由时候添加100个。但有了中间件组就不用这么麻烦了!我们来看下中间件组是怎么定义的。

protected $middlewareGroups = [
 'web' => [
 \App\Http\Middleware\EncryptCookies::class,
 ...
 ],
 'api' => [
 ...
 ],
];

上面的例子就是定义中间件组的格式,比如 web这个键值,它对应为一个数组,该数组有多个中间件组成。

需要声明路由的时候,如下调用就可以了。

Route::group(['middleware' => 'web'],function($route){
 $route->get('hello/world',function(){});
 $route->get('hello/php',function(){});
 // 这样在访问这个这些路由的时候,就会执行中间件组 web 所对应的中间件!
});

**总结:

$middleware/全局中间件,要对所有的请求要做一些处理的时候,就适合定义在该属性内。(比如统计请求次数这些)

$middlewareGroups/中间件组,比如我们项目有api请求和web的请求的时候,就要把两种类型的请求中间件分离开来,这时候就需要我们中间件组啦。

$routeMiddleware/路由中间件,有些个别的请求,我们需要执行特别的中间件时,就适合定义在这属性里面。**

以上这篇浅谈Laravel中的三种中间件的作用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php中常用编辑器推荐
Jan 02 PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
php根据分类合并数组的方法实例详解
Nov 06 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
PHP常见错误提示含义解释(实用!值得收藏)
Apr 25 PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 PHP
浅析PHP数据导出知识点
Feb 17 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
laravel config文件配置全局变量的例子
Oct 13 #PHP
Laravel 读取 config 下的数据方法
Oct 13 #PHP
laravel实现前后台路由分离的方法
Oct 13 #PHP
Laravel数据库读写分离配置的方法
Oct 13 #PHP
Laravel第三方包报class not found的解决方法
Oct 13 #PHP
php7性能提升的原因详解
Oct 13 #PHP
php抽象方法和普通方法的区别点总结
Oct 13 #PHP
You might like
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
Sublime里直接运行PHP配置方法
2014/11/28 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
PHP微商城开源代码实例
2019/03/27 PHP
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
ExpressJS入门实例
2015/01/14 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
javascript实现画板功能
2020/04/12 Javascript
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
python标准库OS模块详解
2020/03/10 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
工作的心得体会
2013/12/31 职场文书
个人党性剖析材料
2014/02/03 职场文书
《云雀的心愿》教学反思
2014/02/25 职场文书
医学求职自荐信
2014/06/21 职场文书
授权委托书范文
2014/07/31 职场文书
家长会感言
2015/08/01 职场文书
上班旷工检讨书
2015/08/15 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js