对于中间件 bindings,api.throttle,api.auth 的困惑

路由文件中( routes/api.php )一共使用了三次个中间件bindings, api.throttle, api.auth。
Kernel 文件中定义的API 中间件组中只有throttle和bindings,为什么调用时是 'middleware' => 'bindings'/ 'middleware' => 'api.throttle'?为何不是 'middleware' => 'api.bindings'(报错),'middleware' => 'throttle'(不报错)
api.auth 在API 中间件组中并未定义,为什么还能使用?
app/Http/Kernel.php

.
.
.
// 定义中间件组
    protected $middlewareGroups = [

        // Web 中间件组,应用于 routes/web.php 路由文件
        'web' => [
           .
           .
           .
        ],

        // API 中间件组,应用于 routes/api.php 路由文件
        'api' => [
            // 使用别名来调用中间件
            // 请见:https://learnku.com/docs/laravel/5.5/middleware#为路由分配中间件
            'throttle:60,1',
            'bindings'
        ],
    ];

routes/api.php

$api->version('v1', [
    'namespace' => 'App\Http\Controllers\Api',
    'middleware' => 'bindings'
], function($api) {

    $api->group([
        'middleware' => 'api.throttle',
        'limit' => config('api.rate_limits.sign.limit'),
        'expires' => config('api.rate_limits.sign.expires')
    ], function($api){
        .
        .
        .
        // 需要 token 验证的接口
        $api->group(['middleware' => 'api.auth'], function($api) {
              .
              .
              .
        });
    });
});
桃知夭夭
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 5
liyu001989

因为使用了 dingo,kernel 中定义的 api 组其实是没用的,所以需要单独再定义一遍。

所以如果用 dingo 只以 路由文件中的中间件为准。

api.auth 扩展包加载的时候 通过 provider 注册进去的。

5年前 评论

@liyu001989 'middleware' => 'bindings' ,'middleware' => 'api.throttle','middleware' => 'api.auth',这三个都不是用的kernel中的中间件?bindings应该是用到了 kernel中 中间件了吧?api.throttle'和api.auth这两个中间件又是从什么地方定义的呢?

5年前 评论
liyu001989

vendor/dingo/api/src/Provider/LaravelServiceProvider.php

file

5年前 评论

@liyu001989 通过你的截图来看,bindings就是用的默认的api的中间件吧?

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!