浅谈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 中include()与require()的对比
Oct 09 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
Dec 31 PHP
功能齐全的PHP发送邮件类代码附详细说明
Jul 10 PHP
PHP HTML代码串截取代码
Dec 29 PHP
PHP数据过滤的方法
Oct 30 PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
Sep 16 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 PHP
使用PHP开发留言板功能
Nov 19 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
php5.2.0内存管理改进
2007/01/22 PHP
分享一个超好用的php header下载函数
2014/01/31 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
javascript中的作用域scope介绍
2010/12/28 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
js友好的时间返回函数
2016/08/24 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
python爬取足球直播吧五大联赛积分榜
2018/06/13 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
学校经典推荐信
2013/10/30 职场文书
税务干部鉴定材料
2014/02/11 职场文书
协会周年庆活动方案
2014/08/26 职场文书
反邪教学习心得体会
2016/01/15 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
Python实现的扫码工具居然这么好用!
2021/06/07 Python