浅谈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生成带有雪花背景的验证码
Sep 28 PHP
PHP is_dir() 判断给定文件名是否是一个目录
May 10 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
Codeigniter生成Excel文档的简单方法
Jun 12 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 PHP
tp5.1 框架查询表达式用法详解
May 25 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 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
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
php摘要生成函数(无乱码)
2012/02/04 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
接口可以包含哪些成员
2012/09/30 面试题
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
二胎满月酒致辞
2015/07/29 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android