Webman 嵌套路由中间件失效问题

Hanmo

bug描述

webman 使用嵌套路由后部分路由不会通过中间件

程序代码或配置

路由配置

Route::group('/api', function () {
    Route::any('/test1', function () {
        return 'test1';
    });
    Route::group('/group', function () {
        Route::any('/test2', function () {
            return 'test2';
        });
    });
    Route::any('/test3', function () {
        return 'test3';
    });
})->middleware(TestMiddleware::class);

中间件配置

<?php

namespace app\middleware;

use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;

class TestMiddleware implements MiddlewareInterface
{
    public function process(Request $request, callable $handler): Response
    {
        return json([false]);
    }
}

期待的结果及实际结果

理论上来说访问每个路由都应该返回 [false]

但实际,在第二层group之前的路由正常通过了中间件,返回[false],后续(包括group中的)未被拦截(实测为未通过中间件),如图所示
截图

重现bug的步骤

curl 127.0.0.1:8787/api/test1
curl 127.0.0.1:8787/api/group/test2
curl 127.0.0.1:8787/api/test3

系统环境及workerman/webman等具体版本

WSL 最新 webman

804 2 0
2个回答

six

https://www.workerman.net/doc/webman/route.html#%E8%B7%AF%E7%94%B1%E4%B8%AD%E9%97%B4%E4%BB%B6
手册说了不支持你这种,正确写法

Route::group('/api', function () {
    Route::any('/test1', function () {
        return 'test1';
    });
    Route::any('/test3', function () {
        return 'test3';
    });
})->middleware(TestMiddleware::class);

Route::group('/api', function () {
    Route::group('/group', function () {
        Route::any('/test2', function () {
            return 'test2';
        });
    })->middleware(TestMiddleware::class);
});
  • 暂无评论
tanhongbin

没事看看手册,你发现你很多理解都不对,看手册,看手册,看手册

  • 暂无评论
年代过于久远,无法发表回答
🔝