我正在构建一个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();
}
}
答案 0 :(得分:2)
我猜想当前的工作目录与您的项目根目录不匹配。因此,相对路径bin/console
不存在。
您有两种方法可以解决这个问题:
设置当前工作目录:
$kernel = ...; // Get instance of your Kernel
$process = new Process('php bin/console app:analysis-file ');
$process->setWorkingDirectory($kernel->getProjectDir());
$bankStatement->getId());
$process->run();
通过Symfony Command调用调用命令,official docs article
请记住,#2的开销很小(如本文所述)
希望这会有所帮助......