如何从中间件之前访问事件

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 变量,因为它只包含:

此外,不想听起来挑剔,before 中间件没有注册 Application::EARLY_EVENT(Application::EARLY_EVENT 是优先级),before 中间件是正在注册 Kernel.REQUEST 活动。

您可以在 Symfony doc site

中了解有关内核事件的更多信息