Symfony 4 asyn c выполнение команды в контроллере - PullRequest
0 голосов
/ 03 августа 2020

Когда я отправляю свою форму, она читает файл из тысяч строк и выполняет некоторые задачи. Для этого я создал команду symfony. После того, как моя форма отправлена ​​и проверена, я передаю команде необходимые аргументы. Различные задачи выполняются, но не асинхронно. Я не могу go перейти на другую страницу до завершения процесса.

Контроллер Symfony

<?php
        
namespace App/Controller
        
class FileConfigController  
{
  public function loadFile(KernelInterface $kernel) {
    // ...
    if ($form->isSubmitted() && $form->isValid()) {
     $name = 'Test.xls';

     $application = new Application($kernel);
     $application->setAutoExit(false);
     $application->setCatchExceptions(true);
     $input = new ArrayInput([
      'command' => 'app:load-file',
      'name' = $name,
      'type' = $form['type']->getData()
     ]);
     $application->run($input, new NullOutput());
  }
}

Командный сценарий Symfony

<?php
        
namespace App/Command
        
class FileCommand extends Command
{
  protected static $defaultName = 'app:load-file';
            
  protected function configure() {}
        
  protected function execute(InputInterface $input, OutputInterface $output)
  {
     $name = $input->getArgument('name');
     $type = $input->getArgument('type');
    
     // Script
   }
}

1 Ответ

0 голосов
/ 03 августа 2020

Очередь задач может разблокировать вас. Для него есть несколько основных пакетов, один из них symfony messenger bundle

https://symfony.com/doc/current/messenger.html

Fyi, если вам это действительно нравится, есть отличный учебник об этом, но это не бесплатно: D

https://symfonycasts.com/screencast/messenger

Чтобы использовать его эффективно, используйте supervisord для управления процессами в фоновом режиме

http://supervisord.org/

...