Symfony 4 Аргументы передачи процесса компонента для команды - PullRequest
0 голосов
/ 06 августа 2020

Symfony Компонентный процесс

/**
     * @param array          $command The command to run and its arguments listed as separate entries
     * @param string|null    $cwd     The working directory or null to use the working dir of the current PHP process
     * @param array|null     $env     The environment variables or null to use the same environment as the current PHP process
     * @param mixed|null     $input   The input as stream resource, scalar or \Traversable, or null for no input
     * @param int|float|null $timeout The timeout in seconds or null to disable
     *
     * @throws LogicException When proc_open is not installed
     */
    public function __construct($command, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60)
    { .. }

Я создал команду и использую компонентный процесс в своем контроллере. Когда я пытаюсь запустить процесс, я получаю исключение ProcessFailException Команда "app: load-file foo bar foobar" не выполнена. Код выхода: 1 (общая ошибка) .. ErrorOutput: неверное имя файла, имя каталога или синтаксис метки тома

use Symfony\Component\Process\Process;

..
public function loadFile(KernelInterface $kernel) 
{
   $argument1 = 'foo';
   $argument2 = 'bar';
   $argument3 = 'foobar';
   $rootDir = $kernel->getProjectDir();
   $process = new Process(array(
      $rootDir . '/bin/console app:load-file',
      $argument1,
      $argument2,
      $argument3
   ));
   
   $process->mustRun();
}

Каков правильный синтаксис для запуска команды с контроллера? / * * @ param array $ command Команда для запуска и ее аргументы перечислены как отдельные записи publi c function __construct ($ command, string $ cwd = null, array $ env = null, $ input = null,? float $ timeout = 60) {..}

1 Ответ

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

$ cwd - второй параметр конструктора.

   $argument1 = 'foo';
   $argument2 = 'bar';
   $argument3 = 'foobar';
   $rootDir = $kernel->getProjectDir();
   $process = new Process(
      "bin/console app:load-file $argument1 $argument2 $argument3",
      $rootDir
   );

   try {
      $process->mustRun();
   } catch(ProcessFailedException $e) {
      echo $e->getMessage();
   }
...