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

關(guān)于全局與應(yīng)用插件中間件的問題

uk8u8

問題描述

請問應(yīng)用插件(plugin)的正常執(zhí)行流程里會執(zhí)行全局中間件么?

我的測試:

  1. 全新安裝webman/admin并登錄后臺
  2. 安裝redis-queue管理應(yīng)用插件
  3. 新建中間件app/middleware/Test.php

    class Test implements MiddlewareInterface
    {
    public function process(Request $request, callable $handler) : Response
    {
        echo $request->url() . PHP_EOL;
        echo 'TestMiddleware' . PHP_EOL;
    
        $response = $handler($request);
    
        return $response;
    }
    }
  4. 修改config/middleware.php配置文件
    return [
    '' => [
        app\middleware\Test::class,
    ]
    ];
  5. 啟動應(yīng)用
    php start.php start

測試結(jié)果

  1. 訪問app/admin應(yīng)用不會執(zhí)行全局中間件。
  2. 訪問后臺的app/queue應(yīng)用下的控制器,有一定的機(jī)率會執(zhí)行全局中間件。

這個結(jié)果讓我有點(diǎn)懵。目前問題我也無法針對性的復(fù)現(xiàn),開發(fā)過程中,訪問后臺app/queue下的控制器時不時的會執(zhí)行全局中間件。我看app/queue下的路由配置里,有個閉包路由:

Route::any('/app/queue', function () {
    return response()->withFile(base_path() . '/plugin/queue/public/index.html');
});

看請求url//127.0.0.1:8787/app/queue及請求控制器名稱為空,貌似是這個閉包路由執(zhí)行了全局中間件?但時有時無。。
求解惑,謝謝!

1284 1 1
1個回答

walkor 打賞

除了路由配置是全局的,其它配置插件與插件之間以及插件與主配置之間不互相影響的,包括中間件。
目前判斷一個請求是否屬于某個插件,不是通過url來判斷的,而是通過實(shí)際調(diào)用的控制器是否以\plugin\xxx開頭來判斷的(這里下個版本可能會優(yōu)化)。
目前的機(jī)制由于閉包函數(shù)不是控制器,所以不屬于任何插件,所以會調(diào)用主項(xiàng)目全局中間件。

這里后期可能會優(yōu)化為:如果路由設(shè)置的是閉包,那么將通過url來判斷是否屬于某個插件的請求,就不會有這個疑問了。

  • uk8u8 2022-12-12

    感謝。明白了。期待發(fā)版!

  • walkor 2022-12-12

    發(fā)了一個小版本,composer require workerman/webman-framework ^v1.4.10 試下
    當(dāng)路由設(shè)置的是一個函數(shù)或者閉包是,插件名通過url來獲取

  • uk8u8 2022-12-12

    親測正常!太迅速了。。^_^

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