Symfony3 - 控制器启动后台任务并在完成时发送电子邮件

Symfony3 - Background task launched by controller and send email when finished

我有一些功能需要花费很多时间,我希望它们在后台执行并在完成后发送电子邮件。 这些函数生成一个 PDF 作为响应,如果可能,我希望将此 PDF 附加到电子邮件中。

这是需要花费大量时间的独立函数:

$passages = $em->getRepository(PasserColle::class)->calculClassementAction($id, $group);

此函数包含在我的控制器中的函数 imprimerAction($id, $request) 中 returns :

return new Response($html2pdf->Output('Classement.pdf'), 200, array('Content-Type' => 'application/pdf'));

我尝试使用流程组件,但我无法让它工作,因为我不明白在括号中输入什么:

$process = new Process('ls -lsa');

以及如何获得我想要的输出。

您可以使用 RabbitMQ 为 Symfony 执行此操作 bundle

这个概念很简单。您将有 Producers 将发送消息(使用您想要的格式)和 Consumers 将使用这些消息。消息在交换器中发布,并将路由到消费者正在等待新消息的队列中。

在您的示例中,您可以生成一条消息,告诉 Consumers 生成 pdf 并发送电子邮件。以 JSON 格式发布消息,例如,在您的情况下,$id$group 消费者将执行他们必须执行的操作。

按照此 link 进行操作,其中解释了如何执行此操作。

否则,如果您想使用进程组件,您可以简单地创建一个 命令控制台,然后执行此操作:$process = new Process('php bin/console yourcommand')$process->run()

希望对您有所帮助。

此致。