Symfony 命令 --no-interaction 不起作用

Cos*_*ica 4 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);
}
Run Code Online (Sandbox Code Playgroud)

我几乎尝试了所有想到的东西。我看不到任何--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)
Run Code Online (Sandbox Code Playgroud)

然后提示我回答。任何的想法?

Cos*_*ica 8

我发现了问题。事实上,$arguments变量被传递给 a new ArrayInput()。我只是将InputInterface $inputinteractive属性设置为false,但是对于我调用的另一个命令,我传递了一个完全不同$migrationInputinteractive属性,它没有将属性设置为false

所以这样做:

$migrationInput = new ArrayInput($arguments);
$migrationInput->setInteractive(false);
$command->run($migrationInput, $output);
Run Code Online (Sandbox Code Playgroud)

解决了问题。不过,我无法弄清楚为什么'--no-interaction' => true我的阵列中的 没有完成它的工作。