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

时间:2015-08-27 07:15:46

标签: middleware silex

正如Silex docs所说,中间件之前的可以通过这种方式实现:

$app->before(function (Request $request, Application $app) {
    // ...
}, Application::EARLY_EVENT);

其中Application::EARLY_EVENT是优先事项。

问题是:有没有办法访问事件对象?

1 个答案:

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

此外,在不想听起来挑剔的情况下,之前的中间件没有注册Application :: EARLY_EVENT(Application :: EARLY_EVENT是优先级),之前中间件正在注册内核.REQUEST 事件。

您可以在Symfony doc site

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