我目前使用 Symfony 3.4 作为无状态 API,Doctrine 作为 ORM。我的控制器从数据库中加载一些对象,对其进行处理,然后返回一个响应。我为事件注册了一个 EventListener 以在kernel.terminate
发送响应后进行后处理 - 发送电子邮件等。我希望有一种机制来共享由 加载的对象Controller
,EventListener
这样我就不必做中的额外数据库查找EventListener
。
现在它看起来像这样:
// Controller.php
public function fooAction(Request $request) {
$id = $request->query->get('id');
$bar = $this->databaseLookupBar($id);
// do stuff to bar ...
return new Response();
}
// EventListener.php
public function onKernelTerminate($event) {
$request = $event->getRequest();
$id = $request->query->get('id');
$bar = $this->databaseLookupBar($id);
// post-processing, send emails, etc.
}
我可以想到两个解决方案:
1)按照我目前的方式进行(1个冗余数据库查找)。
2)将对象存储在会话中,然后在我完成后清除会话。
有更好的解决方案吗?