请问应用插件(plugin)的正常执行流程里会执行全局中间件么?
webman/admin
并登录后台redis-queue管理
应用插件新建中间件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
应用不会执行全局中间件。app/queue
应用下的控制器,有一定的机率会执行全局中间件。这个结果让我有点懵。目前问题我也无法针对性的复现,开发过程中,访问后台app/queue
下的控制器时不时的会执行全局中间件。我看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
及请求控制器名称为空
,貌似是这个闭包路由执行了全局中间件?但时有时无。。
求解惑,谢谢!
除了路由配置是全局的,其它配置插件与插件之间以及插件与主配置之间不互相影响的,包括中间件。
目前判断一个请求是否属于某个插件,不是通过url来判断的,而是通过实际调用的控制器是否以\plugin\xxx开头来判断的(这里下个版本可能会优化)。
目前的机制由于闭包函数不是控制器,所以不属于任何插件,所以会调用主项目全局中间件。
这里后期可能会优化为:如果路由设置的是闭包,那么将通过url来判断是否属于某个插件的请求,就不会有这个疑问了。
感谢。明白了。期待发版!
发了一个小版本,
composer require workerman/webman-framework ^v1.4.10
试下当路由设置的是一个函数或者闭包是,插件名通过url来获取
亲测正常!太迅速了。。^_^