請(qǐng)問應(yīng)用插件(plugin)的正常執(zhí)行流程里會(huì)執(zhí)行全局中間件么?
webman/admin
并登錄后臺(tái)redis-queue管理
應(yīng)用插件新建中間件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;
}
}
config/middleware.php
配置文件
return [
'' => [
app\middleware\Test::class,
]
];
php start.php start
app/admin
應(yīng)用不會(huì)執(zhí)行全局中間件。app/queue
應(yīng)用下的控制器,有一定的機(jī)率會(huì)執(zhí)行全局中間件。這個(gè)結(jié)果讓我有點(diǎn)懵。目前問題我也無法針對(duì)性的復(fù)現(xiàn),開發(fā)過程中,訪問后臺(tái)app/queue
下的控制器時(shí)不時(shí)的會(huì)執(zhí)行全局中間件。我看app/queue
下的路由配置里,有個(gè)閉包路由:
Route::any('/app/queue', function () {
return response()->withFile(base_path() . '/plugin/queue/public/index.html');
});
看請(qǐng)求url//127.0.0.1:8787/app/queue
及請(qǐng)求控制器名稱為空
,貌似是這個(gè)閉包路由執(zhí)行了全局中間件?但時(shí)有時(shí)無。。
求解惑,謝謝!
除了路由配置是全局的,其它配置插件與插件之間以及插件與主配置之間不互相影響的,包括中間件。
目前判斷一個(gè)請(qǐng)求是否屬于某個(gè)插件,不是通過url來判斷的,而是通過實(shí)際調(diào)用的控制器是否以\plugin\xxx開頭來判斷的(這里下個(gè)版本可能會(huì)優(yōu)化)。
目前的機(jī)制由于閉包函數(shù)不是控制器,所以不屬于任何插件,所以會(huì)調(diào)用主項(xiàng)目全局中間件。
這里后期可能會(huì)優(yōu)化為:如果路由設(shè)置的是閉包,那么將通過url來判斷是否屬于某個(gè)插件的請(qǐng)求,就不會(huì)有這個(gè)疑問了。