Symfony2:可以在app_dev.php中获取用户对象

时间:2012-03-08 17:09:56

标签: symfony

您好我想调用必须始终在我们网站的任何页面中执行的任务/功能。 我不知道是否有可能在app_dev.php中做到这一点,或者你可以在哪里推荐我应该这样做。

我虽然在创建一个类并将其定义为服务,但我真的不知道如何启动该服务。我们需要始终启动该服务,无论用户访问哪个页面都无关紧要,我们首先需要运行该服务并在控制器之后。

谢谢

1 个答案:

答案 0 :(得分:1)

在前端控制器(app.php或app_dev.php)中,应用程序尚未启动,因此您无法获得该级别的控制。相反,您要做的是创建一个事件监听器并收听kernel.request event。从该文档页面:

  

此事件的目标是立即返回Response对象或设置变量,以便在事件发生后调用Controller。任何侦听器都可以通过事件上的setResponse()方法返回Response对象。在这种情况下,不会调用所有其他侦听器。

为了设置一个服务来听取那个事件,你会声明它是这样的:

# services.yml
foo_request_listener:
  class: FooVendor\BarBundle\EventListener\RequestEventListener
  arguments: [] # whatever dependencies your listener needs
  tags:
    - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

第一部分(tags之前)只是一个正常的服务声明。 kernel.event_listener标记只是说当您发出GetResponseEvent事件时,您的服务应通过onKernelRequest方法接收kernel.request对象(方法名称是任意的,只是make确保你的服务类实现它),这在调用控制器之前发生在每个请求上。