У меня есть установка с двумя разными соединениями с базой данных, что также означает два разных менеджера сущностей. Я пытаюсь создать команду командной строки Symfony, которая вызывает команду doctrine:migrations:migrate с параметрами --em, --configuration и --no-interaction.
Однако я борюсь с тем фактом, что, несмотря на наличие --no-interaction и $input->setInteractive(false), я все равно получаю запрос с подтверждением.
Взгляните на код:
protected function execute(InputInterface $input, OutputInterface $output) {
$input->setInteractive(false);
// some other code here
$command = $this->getApplication()->find('doctrine:migrations:migrate');
$arguments = array(
'command' => 'doctrine:migrations:migrate',
'version' => $version,
'--em' => $em,
'--configuration' => self::CONFIG_FILES[$em],
'--no-interaction' => true
);
$migrationInput = new ArrayInput($arguments);
$command->run($migrationInput, $output);
}
Я перепробовал практически все, что приходило мне в голову. Я не видел нигде написанного, что --no-interaction не будет работать с командами, вызванными из другой команды. Каждый раз, когда я запускаю эту команду, я получаю следующее:
WARNING! You are about to execute a database migration that could result in schema changes
and data lost. Are you sure you wish to continue? (y/n)
Что затем побуждает меня ответить. Есть идеи?






Я нашел проблему. Дело в том, что переменная $arguments была передана в new ArrayInput(). Я устанавливал только свойство InputInterface $inputinteractive на false, но другой вызываемой мной команде я передавал совершенно другой $migrationInput, у которого для свойства interactive не было задано значение false.
Так поступаем так:
$migrationInput = new ArrayInput($arguments);
$migrationInput->setInteractive(false);
$command->run($migrationInput, $output);
Решил проблему. Однако я не могу понять, почему '--no-interaction' => true в моем массиве не выполняет свою работу.