浅谈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 相关文章推荐
windows xp下安装pear
Dec 02 PHP
使用PHP批量生成随机用户名
Jul 10 PHP
解析func_num_args与func_get_args函数的使用
Jun 24 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 PHP
浅析PHP7的多进程及实例源码
Apr 14 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
Dec 31 PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 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下一个非常全面获取图象信息的函数
2008/11/20 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
jQuery 使用手册(四)
2009/09/23 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
javascript读写json示例
2014/04/11 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
Python3 replace()函数使用方法
2018/03/19 Python
Python unittest模块用法实例分析
2018/05/25 Python
Python for循环生成列表的实例
2018/06/15 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
Python使用进程Process模块管理资源
2020/03/05 Python
Pytorch转tflite方式
2020/05/25 Python
HTML5实现签到 功能
2018/10/09 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
端午节活动策划方案
2014/03/09 职场文书
导游词开场白
2015/01/31 职场文书
小学班主任工作随笔
2015/08/15 职场文书