听Silex上的kernel.request事件?

时间:2012-04-18 09:53:05

标签: symfony silex

我想在Silex微框架http://silex.sensiolabs.org/documentation

上收听kernel.request事件

怎么样?

3 个答案:

答案 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行为:

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

应用程序中间件

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

在Middleware之前

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

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

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

如果您希望中间件运行即使早期抛出异常(例如,在404或403错误上),那么,您需要将其注册为早期事件:< / p>

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

在这种情况下,路由和安全性已经执行,因此您无法访问 {{1 } {},localecurrent route