浅谈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 缓冲的免费实现方法
Oct 09 PHP
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
关于js与php互相传值的介绍
Jun 25 PHP
php上传文件,创建递归目录的实例代码
Oct 18 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
php常用字符串处理函数实例分析
Nov 22 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
php简单防盗链实现方法
Jul 29 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
Jun 07 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下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
PHP Session 变量的使用方法详解与实例代码
2013/09/11 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
golang与PHP输出excel示例
2016/07/22 PHP
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
Python进程池Pool应用实例分析
2019/11/27 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
python实现进度条的多种实现
2021/04/29 Python
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
在Python 中将类对象序列化为JSON
2022/04/06 Python
spring 项目实现限流方法示例
2022/07/15 Java/Android