如何从中间件之前访问事件
How to access the event from before middleware
如Silex docs所说,一个before中间件可以这样实现:
$app->before(function (Request $request, Application $app) {
// ...
}, Application::EARLY_EVENT);
其中 Application::EARLY_EVENT
是优先级。
问题是:有什么方法可以访问事件对象吗?
不,there is not,回调的调用是这个:
$ret = call_user_func(
$app['callback_resolver']->resolveCallback($callback),
$event->getRequest(),
$app
);
如您所见,传递的参数只是请求和容器本身(而不是事件)。
但没有什么能阻止您注册自己的回调:
<?php
// somewhere in your file
$app->on(KernelEvents::RESPONSE, function (FilterResponseEvent $event) use ($app) {
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
return;
}
// do your stuff here, with $event
// If you want to return a response (an instance of Response) inject it on the $event
// $event->setResponse($response);
}, $priority);
话虽如此,我认为没有必要访问 $event
变量,因为它只包含:
- 内核本身(您已经可以访问 Silex 应用程序实例 这是内核)
$request
(您已经可以在中间件回调中访问)
- 请求类型:MASTER|SUBREQUEST (see here), but you can be sure that only MASTER requests trigger the middleware callback
此外,不想听起来挑剔,before 中间件没有注册 Application::EARLY_EVENT(Application::EARLY_EVENT 是优先级),before 中间件是正在注册 Kernel.REQUEST 活动。
您可以在 Symfony doc site
中了解有关内核事件的更多信息
如Silex docs所说,一个before中间件可以这样实现:
$app->before(function (Request $request, Application $app) {
// ...
}, Application::EARLY_EVENT);
其中 Application::EARLY_EVENT
是优先级。
问题是:有什么方法可以访问事件对象吗?
不,there is not,回调的调用是这个:
$ret = call_user_func(
$app['callback_resolver']->resolveCallback($callback),
$event->getRequest(),
$app
);
如您所见,传递的参数只是请求和容器本身(而不是事件)。
但没有什么能阻止您注册自己的回调:
<?php
// somewhere in your file
$app->on(KernelEvents::RESPONSE, function (FilterResponseEvent $event) use ($app) {
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
return;
}
// do your stuff here, with $event
// If you want to return a response (an instance of Response) inject it on the $event
// $event->setResponse($response);
}, $priority);
话虽如此,我认为没有必要访问 $event
变量,因为它只包含:
- 内核本身(您已经可以访问 Silex 应用程序实例 这是内核)
$request
(您已经可以在中间件回调中访问)- 请求类型:MASTER|SUBREQUEST (see here), but you can be sure that only MASTER requests trigger the middleware callback
此外,不想听起来挑剔,before 中间件没有注册 Application::EARLY_EVENT(Application::EARLY_EVENT 是优先级),before 中间件是正在注册 Kernel.REQUEST 活动。
您可以在 Symfony doc site
中了解有关内核事件的更多信息