2

我想在 Silex 微框架http://silex.sensiolabs.org/documentation上收听 kernel.request 事件

如何 ?

4

3 回答 3

11

您可以访问调度程序服务$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
});
于 2012-04-18T11:32:47.553 回答
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
});
于 2016-03-28T09:11:11.397 回答
0

根据Silex 中间件 文档

Silex 允许您在通过中间件处理请求的不同阶段运行更改默认 Silex 行为的代码:

  • 应用程序中间件的触发独立于当前处理的请求;
  • 路由中间件在其关联路由匹配时触发。

应用程序中间件

应用程序中间件仅针对请求运行。

中间件之前

前应用程序中间件允许您在执行控制器之前调整请求:

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

默认情况下,中间件在路由和安全之后运行。

如果您希望即使在早期抛出异常(例如 404 或 403 错误)也能运行中间件,则需要将其注册为早期事件:

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

在这种情况下,不会执行路由和安全性,因此您将无法访问、或。localecurrent routesecurity user

于 2017-01-01T08:01:54.283 回答