浅谈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(1)
Oct 09 PHP
php email邮箱正则
Oct 08 PHP
php UBB 解析实现代码
Nov 27 PHP
php引用返回与取消引用的详解
Jun 08 PHP
实现PHP多线程异步请求的3种方法
Jan 17 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 PHP
php的debug相关函数用法示例
Jul 11 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
Oct 24 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 PHP
Laravel中获取IP的真实地理位置
Apr 01 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实现Javascript中的escape及unescape函数代码分享
2015/02/10 PHP
php二维码生成
2015/10/19 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
Vue组件间通信 Vuex的用法解析
2019/08/05 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
python如何写try语句
2020/07/14 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
物业管理公司实习生自我鉴定
2013/09/19 职场文书
开会迟到检讨书
2014/02/03 职场文书
军神教学反思
2014/02/04 职场文书
职工趣味运动会方案
2014/02/10 职场文书
元旦联欢会主持词
2014/03/26 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
2015年教师节主持词
2015/07/03 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
vue里使用create, mounted调用方法
2022/04/26 Vue.js