Symfony3 - 控制器启动的后台任务,完成后发送电子邮件

时间:2016-08-12 08:34:37

标签: php asynchronous background-process symfony

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

这是一个需要花费大量时间的独立功能:

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

此函数包含在我的Controller中,函数imprimerAction($ id,$ request)返回:

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

我尝试使用Process Component但我无法使其工作,因为我不明白在括号中输入什么:

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

如何获得我想要的输出。

1 个答案:

答案 0 :(得分:2)

您可以使用 RabbitMQ 执行此操作,并使用此bundle进行Symfony。

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

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

按照link说明如何执行此操作。

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

我希望它有所帮助。

最诚挚的问候。