【发布时间】:2021-02-23 20:02:38
【问题描述】:
在 Symfony 5 上,我有一个控制器,它调用一个执行繁重工作的服务,它根据用户输入的内容更新数据库中的行。
如果用户输入一千行我想return 一个JsonResponse 给用户,然后做繁重的工作并发送电子邮件。
我已尝试根据this将此添加到我的服务中
if($isHeavyJob) {
$email = $this->request->get("email");
$this->eventDispatcher->addListener(KernelEvents::TERMINATE, function (Event $event) use ($userEmail) {
$this->runJob($userEmail);
});
return new JsonResponse(['message' => 'Is a Heavy Job, wait a response via email.'], 200);
}
$data = $this->runJob();
return new JsonResponse(['message' => 'Not a heavy job so here is your data.', 'data' => $data], 200);
但我得到了
Uncaught Error: Argument 1 passed to App\Service\HeavyJob::App\Service\HeavyJob{closure}() must be an instance of Symfony\Component\EventDispatcher\Event
我需要创建一个单独的事件吗?
【问题讨论】:
-
您应该查看Symfony Messenger,更具体地说是async queued messages。它允许您发送“消息”(其中包含数据的 php 对象),例如使用要更改的数据,然后您可以使用提供的命令在处理程序中处理它们(这基本上是您调用繁重工作的地方)。
-
从回调中移除
Event类型提示。你到达那里的类型错误。 var_dump 来搞清楚什么是类型,是吗。
标签: symfony events service dispatch symfony5