我有一些功能花了很多时间,我希望它们在后台执行,并在完成后发送电子邮件。 这些函数生成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');
如何获得我想要的输出。
答案 0 :(得分:2)
您可以使用 RabbitMQ 执行此操作,并使用此bundle进行Symfony。
这个概念很简单。您将拥有 Producers ,他们将发送消息(使用您想要的格式)和消费者将使用这些消息。消息在交换中发布,并将路由到消费者正在等待新消息的队列中。
在您的示例中,您可以生成一条消息,告诉消费者执行pdf生成和发送电子邮件。以JSON格式发布消息,例如,使用$id
和$group
,消费者将执行他们必须执行的操作。
按照link说明如何执行此操作。
否则,如果您想使用Process Component,您可以简单地创建命令控制台然后执行此操作:$process = new Process('php bin/console yourcommand')
和$process->run()
我希望它有所帮助。
最诚挚的问候。