AG广东会,山东十一选五,大发

?
  • AG广东会400电话
  • 微网小程序
  • AI电话山东十一选五
  • 电商代运营
  • AG广东会,山东十一选五,大发:全 部 栏 目

    AG广东会400电话 网络优化推广 AI电话山东十一选五 呼叫中心 网站建设 商标?知产 微网小程序 电商运营 彩铃?短信 增值拓展业务
    基于Laravel 多个中间件的执行顺序详解

    问题

    一个路由需要用到多个中间件,其中一个是 Laravel 自带的 auth 中间件。

    发现这个中间件不管放在哪里,总是在自定义中间件之前执行。

    如果业务需要自定义中间在 auth 之前执行,还是有办法的。

    解决方案

    观察定义中间件的 app\Http\Kernel 类,是继承的 Illuminate\Foundation\Http\Kernel 类。

    再打开 Illuminate\Foundation\Http\Kernel ,发现有这样一个数组

      ...
    
      /**
       * The priority-sorted list of middleware.
       *
       * Forces the listed middleware to always be in the given order.
       *
       * @var array
       */
      protected $middlewarePriority = [
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \Illuminate\Auth\Middleware\Authenticate::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Illuminate\Auth\Middleware\Authorize::class,
      ];
    
      ...
    

    注释里写得比较清楚了:列表中的中间件会按照顺序优先在其他中间件之前执行。

    那么需要自定义中间件在 auth 之前执行,只需要在 app\Http\Kernel 重载这个数组就行了。

    auth 中间件对应的类 \Illuminate\Auth\Middleware\Authenticate,

    将自定义中间件 \App\Http\Middleware\CustomMiddelware 放到这个前面就可以了:

      ...
    
      protected $middlewarePriority = [
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\CustomMiddelware::class,
        \Illuminate\Auth\Middleware\Authenticate::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Illuminate\Auth\Middleware\Authorize::class,
      ];
    
      ...
    

    拓展

    不在 $middlewarePriority 列表中的中间件,是按照在路由配置里调用的顺序来的:

    在 Route::group 里定义的,先执行外层,后执行内层

    在数组定义的,先执行写在数组前面的,后执行写在数组后面的

    举例:

    Route::group(['middleware' => 'outer'], function () {
      Route::group(['middleware' => 'inner'], function () {
        Route::group(['middleware' => ['array1', 'array2', 'auth:api']], function () {
          Route::get('test', function () {
            return;
          });
        });
      });
    });
    

    这里就是按照 outer 、 inner 、 array1 、 array2 的顺序执行。

    以上这篇基于Laravel 多个中间件的执行顺序详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • Laravel中间件实现原理详解
    • Laravel框架实现利用中间件进行操作日志记录功能
    • Laravel的throttle中间件失效问题解决方法
    • Laravel获取当前请求的控制器和方法以及中间件的例子
    • laravel框架中间件 except 和 only 的用法示例
    • Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
    • 浅谈Laravel中的三种中间件的作用
    • Laravel5.1框架注册中间件的三种场景详解
    • laravel利用中间件防止未登录用户直接访问后台的方法
    • laravel利用中间件做防非法登录和权限控制示例
    • Laravel5.1 框架Middleware中间件基本用法实例分析
    • laravel框架中间件简单使用方法示例
    上一篇:laravel利用中间件做防非法登录和权限控制示例
    下一篇:laravel5 Eloquent 实现事务方式
  • 相关文章
  • ?

    ? 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    基于Laravel 多个中间件的执行顺序详解 基于,Laravel,多个,中间件,

    AG广东会官网入口(中国)官方网站-IOS/Android通用版(2026已更新)