浅谈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循环获取GET和POST值的代码
Apr 09 PHP
PHP 进程锁定问题分析研究
Nov 24 PHP
php笔记之:AOP的应用
Apr 24 PHP
解析wamp5下虚拟机配置文档
Jun 27 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
PHP程序员基本要求和必备技能
May 09 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
Yii框架获取当前controlle和action对应id的方法
Dec 03 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 16 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 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的简单采集数据入库程序【续篇】
2014/07/30 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
javascript编程起步(第三课)
2007/02/27 Javascript
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
python开发中module模块用法实例分析
2015/11/12 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
英文翻译的自我评价语句
2013/10/04 职场文书
中文专业毕业生自荐书范文
2014/01/04 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
入职担保书怎么写
2014/05/12 职场文书
环保倡议书400字
2014/05/15 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
详细总结Python常见的安全问题
2021/05/21 Python