我有一个具有两个不同数据库连接的设置,这也意味着两个不同的实体管理器。我正在尝试使用doctrine:migrations:migrate
,--em
和--configuration
选项创建一个调用--no-interaction
命令的Symfony CLI命令。然而,尽管有--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 $input
的interactive
属性设置为false
,但是对于我的另一个命令,我传递了一个完全不同的$migrationInput
,它没有将interactive
属性设置为false
。
这样做:
$migrationInput = new ArrayInput($arguments);
$migrationInput->setInteractive(false);
$command->run($migrationInput, $output);
解决了这个问题。我无法弄清楚为什么我阵列中的'--no-interaction' => true
不能正常工作。