2016-08-12 3 views
0

У меня есть некоторые функции, занимающие много времени, и я хочу, чтобы они исполнялись в фоновом режиме и отправляли электронное письмо по завершении. Эти функции генерируют PDF как ответ, и, если возможно, я хочу, чтобы этот PDF-файл был прикреплен к электронной почте.Symfony3 - Фоновая задача, запущенная контроллером и отправленная по электронной почте по окончании

Это функция автономной, которая занимает много времени:

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

Эта функция включена в мой контроллер в функции imprimerAction ($ ID, $ запрос), который возвращает:

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

Я попытался использовать компонент Process, но я не могу заставить его работать, так как я не понимаю, что вводить в круглые скобки:

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

И как получить вывод, который я хочу.

ответ

2

Вы можете использовать RabbitMQ, чтобы сделать это и этот bundle для Symfony.

Концепция проста. У вас будет Продюсеры, которые будут отправлять сообщения (в нужном формате) и Потребители, которые будут использовать эти сообщения. Сообщения публикуются в обмене и будут маршрутизироваться в очередь, в которой потребители ждут новых сообщений.

В вашем примере вы можете написать сообщение, которое сообщит Потребителям, чтобы создать PDF-сообщение и отправить электронное письмо. Публикуйте сообщение в формате JSON, например, в вашем случае $id и $group, а потребители будут делать то, что им нужно.

Следуйте за этим link, которые объясняют, как вы можете это сделать.

В противном случае, если вы хотите использовать компонент процесса, вы можете просто создать командной консоли, а затем сделать это: $process = new Process('php bin/console yourcommand') и $process->run()

Я просто надеюсь, что это помогает.

С наилучшими пожеланиями.

+0

Я рассмотрю решение RabbitMQ. Спасибо ! –