您好我想调用必须始终在我们网站的任何页面中执行的任务/功能。 我不知道是否有可能在app_dev.php中做到这一点,或者你可以在哪里推荐我应该这样做。
我虽然在创建一个类并将其定义为服务,但我真的不知道如何启动该服务。我们需要始终启动该服务,无论用户访问哪个页面都无关紧要,我们首先需要运行该服务并在控制器之后。
谢谢
答案 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确保你的服务类实现它),这在调用控制器之前发生在每个请求上。