Я создаю веб-приложение symfony4. У меня есть команда, которую я могу запустить как шарм прямо в 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".
Это CommandClass:
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();
}
}






Я предполагаю, что текущий рабочий каталог не соответствует корню вашего проекта. По этой причине относительный путь bin/console не существует.
У вас есть 2 способа решить эту проблему:
Установите текущий рабочий каталог:
$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, который описан в официальная статья в документации
Имейте в виду, что №2 имеет небольшие накладные расходы (как описано в статье).
Надеюсь это поможет...
Решение №2 не запускает команду асинхронно.
Ааааааа и .... отлично сработало. Мне стыдно забыть рабочий каталог. В любом случае для тех, кто хочет получить экземпляр ядра:
$this->container->get('kernel');Спасибо!