浅谈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 相关文章推荐
dedecms模版制作使用方法
Apr 03 PHP
PHP __autoload函数(自动载入类文件)的使用方法
Feb 04 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
Jul 02 PHP
php多文件上传实现代码
Feb 20 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
PHP中if和or运行效率对比
Dec 12 PHP
php文件压缩之PHPZip类用法实例
Jun 18 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
php数组指针操作详解
Feb 14 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
php实现微信公众号创建自定义菜单功能的实例代码
Jun 11 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
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
2013/05/27 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
js DOM模型操作
2009/12/28 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
python 导入数据及作图的实现
2019/12/03 Python
Python 去除字符串中指定字符串
2020/03/05 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
党课学习思想汇报
2014/01/02 职场文书
学历证明样本
2015/06/16 职场文书
廉洁自律证明
2015/06/24 职场文书
中学生运动会广播稿
2015/08/19 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
Nginx报错104:Connection reset by peer问题的解决及分析
2022/07/23 Servers