Symfony4 - 进程 - 命令无法打开输入文件箱/控制台

时间:2018-04-11 17:34:43

标签: php symfony command-line-interface

我正在构建一个symfony4 webapp。 我有一个命令,我可以直接在cli中像魅力一样运行:

php bin/console app:analysis-file 4

但是,如果我直接从exec来尝试Controller

$process = new Process('php bin/console app:analysis-file '. 
$bankStatement->getId());
$process->run();

然后$process->getOutput()返回“Could not open input file bin/console”。

这是Command Class

class AnalysisFileCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this
            ->setName('app:analysis-file')
            ->addArgument('file_id', InputArgument::REQUIRED);
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $entityManager = $this->getContainer()->get('doctrine')->getEntityManager();
        $bankStatement = $entityManager->getRepository(BankStatement::class)->find($input->getArgument("file_id"));
        $bankStatement->setStatus(BankStatement::ANALYZING);
        $entityManager->persist($bankStatement);
        $entityManager->flush();
    }
}

1 个答案:

答案 0 :(得分:2)

我猜想当前的工作目录与您的项目根目录不匹配。因此,相对路径bin/console不存在。

您有两种方法可以解决这个问题:

  1. 设置当前工作目录:

    $kernel = ...; // Get instance of your Kernel
    $process = new Process('php bin/console app:analysis-file ');
    $process->setWorkingDirectory($kernel->getProjectDir());
    $bankStatement->getId());
    $process->run();
    
  2. 通过Symfony Command调用调用命令,official docs article

  3. 请记住,#2的开销很小(如本文所述)

    希望这会有所帮助......