我有一个带有两个不同数据库连接的设置,这也意味着两个不同的实体管理器。我正在尝试创建一个Symfony CLI命令,该命令使用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)
然后哪个提示我回答。有想法吗?
答案 0 :(得分:3)
我发现了问题。事实是$arguments
变量被传递给new ArrayInput()
。我只是将InputInterface $input
的{{1}}属性设置为interactive
,但是对于另一个我叫的命令,我传递的是完全不同的false
,其中没有{{1 }}属性设置为$migrationInput
。
这样做:
interactive
解决了问题。我无法弄清楚为什么数组中的false
不能完成它的工作。