Symfony命令-无交互不起作用

时间:2018-08-31 16:06:57

标签: php symfony doctrine-orm

我有一个带有两个不同数据库连接的设置,这也意味着两个不同的实体管理器。我正在尝试创建一个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)

然后哪个提示我回答。有想法吗?

1 个答案:

答案 0 :(得分:3)

我发现了问题。事实是$arguments变量被传递给new ArrayInput()。我只是将InputInterface $input的{​​{1}}属性设置为interactive,但是对于另一个我叫的命令,我传递的是完全不同的false,其中没有{{1 }}属性设置为$migrationInput

这样做:

interactive

解决了问题。我无法弄清楚为什么数组中的false不能完成它的工作。