在我的 Symfony2.2 应用程序中,我使用了一个 onKernelTerminate EventListener,以便在我的响应被呈现后我可以进行一些“繁重的”处理,以便用户获得更快的响应时间。
在我的控制器中,我在请求上设置了一个属性,以便当事件侦听器运行时,该属性可用于确定是否有某些内容以及要处理的内容。
这在我的开发环境和未启用 AppCache 的测试环境中完美运行。但是,一旦我启用 AppCache(在我的 app.php 中)——我想要这样做,因为我将它用于我所有的 HTTP 缓存——事件侦听器停止工作,因为我通过 onKernelTerminate 中的事件访问的请求似乎有一个空属性参数包。
我在控制器中设置的属性不适用于 PostResponseEvent 中的请求。
为什么AppCache会有这个效果?是否有另一种方法可以在我的控制器和可与 AppCache 一起使用的事件侦听器之间传递数据?
这是一段代码,您可以看到:
#in my controller
$request->attributes->set('listener-to-process', 'test');
#in my EventListener:
public function onKernelTerminate(PostResponseEvent $event) {
$request = $event->getRequest();
//use this request attribute to decide what to process
if (!$request->attributes->has('listener-to-process')) {
return;
};
$type = $request->attributes->get('listener-to-process');
$status = $this->api->persistTag(type);
return;
}