前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel 三种中间件作用讲解

Laravel 三种中间件作用讲解

作者头像
双面人
发布2020-02-18 18:05:31
7610
发布2020-02-18 18:05:31
举报
文章被收录于专栏:热爱IT热爱IT

昨天在开发过程中,需要使用到中间件的技术,之前都只是简单的认为要增加中间件就往middleware里添加中间件即可。本着周末的时间,就仔细研究了下 $middleware $middlewareGroup $routeMiddleware三个属性,到底是怎么样用的,通过查阅文档和网上资料,可算是搞明白了这三个属性是怎么用的和该怎么用。

$middleware属性:

这个属性称为全局中间件,为什么说是全局中间件呢?因为你的每一次请求,这里面的每个中间件都会执行。

$routeMiddleware属性:

这个属性称为路由中间件,为什么说是路由中间件呢?因为定义在该属性内的中间件,只能在定义路由时候引用。 假设这是我们定义的路由中间件:

  1. protected $routeMiddleware = [
  2. ...
  3. 'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
  4. ];

如果我们要使用\Illuminate\Auth\Middleware\Authenticate::class这个中间件该怎么做呢? Route::get('hello/laravel-china','XXController@index')->middleware('auth'); 我们定义路由时候调用了middleware方法,参数值是auth, 这样访问这个路由的时候,就会执行该中间件。明白了吧!很简单的。

$middlewareGroups属性:

这个属性称为中间件组,为什么说是中间件组呢?我们之前说了路由中间件,是不是感觉这样添加路由中间件很麻烦,比如我们执行10个中间件,是不是就要在定义路由时候添加10个呢?有了中间件组就不用这么麻烦了。我们来看下中间件组是怎么定义的。

代码语言:javascript
复制
  1. protected $middlewareGroups = [
  2. 'web' => [
  3. \App\Http\Middleware\EncryptCookies::class,
  4. ...
  5. ],
  6. 'api' => [
  7. ...
  8. ],
  9. ];

好了,上面的例子就是定义中间件组的格式,比如我们看 web这个键值,它对应为一个数组,该数组有多个中间件组成。当我们定义好后,该怎么使用呢? 我们在声明路由的时候,这样调用就可以了。

代码语言:javascript
复制
  1. Route::group(['middleware' => 'web'],function($route){
  2. $route->get('hello/world',function(){});
  3. $route->get('hello/php',function(){});
  4. // 这样在访问这个这些路由的时候,就会执行中间件组 web 所对应的中间件,方便多了,批量式的。
  5. });

总结:

$middleware:全局中间件,要对所有的请求要做一些处理的时候,就适合定义在该属性内。(比如统计请求次数这些) $middlewareGroups:中间件组,比如我们项目有api请求和web的请求的时候,就要把两种类型的请求中间件分离开来,这时候就需要我们中间件组啦。 $routeMiddleware:路由中间件,有些个别的请求,我们需要执行特别的中间件时,就适合定义在这属性里面。

已经掌握中间件的大神就请不要见笑,本着写一次也是想让自己熟悉laravel的中间件和一些初学laravel朋友的一点点帮助,谢谢!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • $middleware属性:
  • $routeMiddleware属性:
  • $middlewareGroups属性:
  • 总结:
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档