浅谈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 无限级缓存的类的扩展
Mar 16 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
PHP导入导出Excel代码
Jul 07 PHP
[原创]PHP简单开启curl的方法(测试可行)
Jan 11 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
php接口实现拖拽排序功能
Apr 23 PHP
php微信开发之关注事件
Jun 14 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
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
php数组分页实现方法
2016/04/30 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
使用Python编写vim插件的简单示例
2015/04/17 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
python dict乱码如何解决
2020/06/07 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
合伙协议书范本
2014/04/21 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
《角的度量》教学反思
2016/02/18 职场文书
Python预测分词的实现
2021/06/18 Python
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
python scrapy简单模拟登录的代码分析
2021/07/21 Python
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL