正如Silex docs所说,中间件之前的可以通过这种方式实现:
$app->before(function (Request $request, Application $app) {
// ...
}, Application::EARLY_EVENT);
其中Application::EARLY_EVENT
是优先事项。
问题是:有没有办法访问事件对象?
答案 0 :(得分:2)
不,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
变量,因为它只包含:
$request
(您已经可以在中间件回调中访问)此外,在不想听起来挑剔的情况下,之前的中间件没有注册Application :: EARLY_EVENT(Application :: EARLY_EVENT是优先级),之前中间件正在注册内核.REQUEST 事件。
您可以在Symfony doc site
中了解有关内核事件的更多信息