我有一些函数需要很多时间,我希望它们在后台执行,并在完成时发送电子邮件。这些函数生成一个PDF作为响应,如果可能的话,我希望这个PDF附加到电子邮件。
这是一个耗时很长的独立函数:
$passages = $em->getRepository(PasserColle::class)->calculClassementAction($id, $group);
这个函数包含在我的控制器中的函数imprimerAction($id, $request)中,返回:
return new Response($html2pdf->Output('Classement.pdf'), 200, array('Content-Type' => 'application/pdf'));
我试图使用进程组件,但我不能使它工作,因为我不明白在括号中输入什么:
$process = new Process('ls -lsa');
以及如何得到我想要的输出
你可以使用RabbitMQ来完成这个操作,以及Symfony的这个包。
这个概念很简单。你将有生产者发送消息(使用你想要的格式)和消费者消费这些消息。消息在交换器中发布,并将被路由到等待新消息的消费者队列中。
在您的示例中,您可以生成一条消息,告诉Consumers生成pdf并发送电子邮件。发布一个JSON格式的消息,例如,在你的例子中,$id
和$group
和消费者将做他们必须做的事情。
点击这个链接,了解如何做到这一点。
否则,如果你想使用进程组件,你可以简单地创建一个命令控制台,然后这样做:$process = new Process('php bin/console yourcommand')
和$process->run()
我只是希望它能帮到你。
问好。