我想在 Silex 微框架http://silex.sensiolabs.org/documentation上收听 kernel.request 事件
如何 ?
您可以访问调度程序服务$app['dispatcher']
,您可以在此处查看如何使用它。但我认为你应该使用 Silex 的before
事件,因为它也被调用kernel.request
(这里是一个很好的例子,如何使用它)。
更新:
上面的链接已过时。在过滤器移至新的中间件部分之前,您可以这样编写:
$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
});
silex 应用程序上有一种on($eventName, $callback, $priority = 0)
方法,您可以使用它来监听任何事件。在这种特殊情况下,它将如下所示。
$app->on(Symfony\Component\HttpKernel\KernelEvents::REQUEST, function (Symfony\Component\HttpKernel\Event\GetResponseEvent $event) use ($app) {
// Your actions
});
根据Silex 中间件 文档:
Silex 允许您在通过中间件处理请求的不同阶段运行更改默认 Silex 行为的代码:
应用程序中间件仅针对主请求运行。
前应用程序中间件允许您在执行控制器之前调整请求:
$app->before(function (Request $request, Application $app) {
// ...
});
默认情况下,中间件在路由和安全之后运行。
如果您希望即使在早期抛出异常(例如 404 或 403 错误)也能运行中间件,则需要将其注册为早期事件:
$app->before(function (Request $request, Application $app) {
// ...
}, Application::EARLY_EVENT);
在这种情况下,不会执行路由和安全性,因此您将无法访问、或。locale
current route
security user