我想在Silex微框架http://silex.sensiolabs.org/documentation
上收听kernel.request事件怎么样?
答案 0 :(得分:10)
您可以$app['dispatcher']
访问调度程序服务,您可以看到here如何使用它。但我认为您应该使用Silex的before
事件,因为它也会在kernel.request
上调用(here是一个很好的示例,如何使用它)。
<强>更新强>
上述链接已过时。在过滤器移动到新的middlewares section之前,您可以在此处编写一个:
$app->before(function (Request $request) {
// do what you want ...
// if you want you can return a response so the controller won't be called
// return new Response($content);
// or just return null
});
答案 1 :(得分:3)
在silex应用程序上有一个on($eventName, $callback, $priority = 0)
方法,您可以使用它监听任何事件。在这个特殊情况下,它将如下。
$app->on(Symfony\Component\HttpKernel\KernelEvents::REQUEST, function (Symfony\Component\HttpKernel\Event\GetResponseEvent $event) use ($app) {
// Your actions
});
答案 2 :(得分:0)
根据 Silex中间件 documentation:
Silex允许您在通过中间件处理请求期间的不同阶段运行代码,以更改默认的Silex行为:
应用程序中间件仅针对主请求运行。
之前的应用程序中间件允许您在执行控制器之前调整请求 :
$app->before(function (Request $request, Application $app) {
// ...
});
默认情况下,中间件在路由和安全性后运行。
如果您希望中间件运行即使早期抛出异常(例如,在404或403错误上),那么,您需要将其注册为早期事件:< / p>
$app->before(function (Request $request, Application $app) {
// ...
}, Application::EARLY_EVENT);
在这种情况下,路由和安全性已经执行,因此您无法访问 {{1 } {},locale
或current route
。