浅谈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 相关文章推荐
文章推荐系统(三)
Oct 09 PHP
基于mysql的论坛(4)
Oct 09 PHP
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
Mar 19 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
解析php中call_user_func_array的作用
Jun 07 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
PHP调用全国天气预报数据接口查询天气示例
Feb 20 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
Aug 06 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
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
python实现删除文件与目录的方法
2014/11/10 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
python基于SMTP协议发送邮件
2019/05/31 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
解析python的局部变量和全局变量
2019/08/15 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
计算机网络专业推荐信
2013/11/24 职场文书
大学生村官任职感言
2014/01/09 职场文书
教师考核评语
2014/04/28 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
Python socket如何解析HTTP请求内容
2022/02/12 Python