国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

多層Route::group,中間件順序反了

ric

問(wèn)題描述

"name": "workerman/webman-framework",
"version": "v1.5.8",

多層Route::group,中間件規(guī)則應(yīng)該是:
全局中間件 -》 應(yīng)用中間件 -》 最外層 Route::group中間件 -》里層Route::group中間件 -》 Route::post等具體路由中間件

但實(shí)際的執(zhí)行情況是:
全局中間件 -》 應(yīng)用中間件 -》 Route::post等具體路由中間件 -》里層Route::group中間件 -》 最外層 Route::group中間件

也就是通過(guò)路由文件上配置的中間件執(zhí)行順序反過(guò)來(lái)了

程序代碼或配置

 Route::group('/toadmin', function () {
    //權(quán)限相關(guān)模塊
    Route::group('/auth', function () {
        //登錄
        Route::post('/login', [app\toadmin\controller\Index::class, 'index'])->middleware([new app\common\middleware\Auth(['toadmin', 'login'])]);
    });

})->middleware([new app\common\middleware\Decryption(['toadmin'])]);

上面執(zhí)行 /toadmin/auth/login 本意是先Decryption,然后Auth
執(zhí)行結(jié)果是先Auth然后再到Decryption了

重現(xiàn)問(wèn)題的步驟

寫個(gè)多層路由中間件即可復(fù)習(xí)

操作系統(tǒng)環(huán)境及workerman/webman等具體版本

"name": "workerman/webman-framework",
"version": "v1.5.8",

##############處理################
vendor/workerman/webman-framework/src/App.php
219行 $routeMiddlewares = array_reverse($route->getMiddleware());

這里進(jìn)行了反轉(zhuǎn),其實(shí)是不需要的,應(yīng)該改為$routeMiddlewares = $route->getMiddleware();

執(zhí)行順序是倒過(guò)來(lái)的,
$middlewares = array_merge($middlewares, Middleware::getMiddleware($plugin, $app, $withGlobalMiddleware));

可以看出,合并全局和應(yīng)用中間件的時(shí)候,是添加在數(shù)組后的

1194 3 1
3個(gè)回答

wocall

研究的真深

  • ric 2023-09-11

    剛好用到,結(jié)果出現(xiàn)的預(yù)料外的情況而已

  • ric 2023-09-11

    @walkor 大佬看下,確認(rèn)的話,看看能否修復(fù)下,遷移的時(shí)候剛好用到

PHP甩JAVA一條街

意思是老大寫錯(cuò)代碼了嗎

  • ric 2023-09-11

    估計(jì)是升級(jí)框架的時(shí)候沒(méi)有改到

walkor 打賞

確實(shí)反了,感謝反饋。

  • walkor 2023-09-11

    修復(fù)了,執(zhí)行
    composer require workerman/webman-framework ^1.5.9
    升級(jí)

  • ric 2023-09-11

    ??????

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??