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()
希望对您有所帮助。
此致。
我有一些功能需要花费很多时间,我希望它们在后台执行并在完成后发送电子邮件。 这些函数生成一个 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()
希望对您有所帮助。
此致。