Команда Symfony - нет взаимодействия не работает

У меня есть установка с двумя разными соединениями с базой данных, что также означает два разных менеджера сущностей. Я пытаюсь создать команду командной строки 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)

Что затем побуждает меня ответить. Есть идеи?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
1 557
1

Ответы 1

Я нашел проблему. Дело в том, что переменная $arguments была передана в new ArrayInput(). Я устанавливал только свойство InputInterface $inputinteractive на false, но другой вызываемой мной команде я передавал совершенно другой $migrationInput, у которого для свойства interactive не было задано значение false.

Так поступаем так:

$migrationInput = new ArrayInput($arguments);
$migrationInput->setInteractive(false);
$command->run($migrationInput, $output);

Решил проблему. Однако я не могу понять, почему '--no-interaction' => true в моем массиве не выполняет свою работу.

Другие вопросы по теме