我在 session 中使用带Redis的Symfony 4.4。
我有一些 Controller ,希望在向用户发送回复后在后台更新数据库。
所以我写了这样的代码:
class GetCatController extends AbstractController
{
public function getCatController(LoggerInterface $logger, ManagerRegistry $doctrine, SessionInterface $session, ValidatorInterface $validator)
{
[...]
$replyToSend = new JsonResponse($reply, 200);
$replyToSend->send();
//My back ground activity like to do some query on the db.
[...]
return null;
}
但是我在 session 上遇到了一些问题。在回复用户之前,是否有更好的方法来创建和运行后台 Activity 发送?
最佳答案
有两种方法可以做到这一点。
如果您在php-fpm(而不是mod_php)下运行PHP,则可以调度并捕获事件kernel.terminate在Symfony 4.4之前的版本中,这称为PostResponseEvent
(4.4 / 5.0中的TerminateEvent
)。
更好的选择可能是Symfony Messenger。在这里,您将创建一个消息对象,其中包含执行任务所需的所有信息,然后将其发送到后台队列(支持将Redis作为队列)。然后,工作人员使用该消息并执行任务。
关于php - Symfony后台事件发送响应错误 session 后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63030511/