Symfony自定义命令在第一次执行后停止

时间:2017-12-12 15:20:40

标签: php symfony symfony-3.3

我正在尝试使用Symfony第一次创建自定义命令。 该命令应该一次执行3个命令。

这是我的命令类

class DoctrineFullFixturesLoadCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this
            ->setName('doctrine:full-fixtures:load')
            ->setDescription('...')
            ->addArgument('argument', InputArgument::OPTIONAL, 'Argument description')
            ->addOption('option', null, InputOption::VALUE_NONE, 'Option description')
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $argument = $input->getArgument('argument');

        if ($input->getOption('option')) {
            // ...
        }

        $arrCommands = [
            [
                'command' => 'doctrine:database:drop',
                '--force' => true
            ], [
                'command' => 'doctrine:database:create'
            ], [
                'command' => 'doctrine:schema:update',
                '--force' => true,
                '--complete' => true
            ]
        ];


        foreach ($arrCommands as $arrInput) {
            $this->getApplication()->run(
                new ArrayInput($arrInput),
                $output
            );
        }

        $output->writeln('Command result.');
    }
}

迭代开始时会出现问题。 它实际上只执行行中的第一个命令而不是全部三个命令。 似乎迭代在执行第一个命令之后由于某种原因而停止,我不明白,事实上最后的方法$output->writeln根本没有被调用。

1 个答案:

答案 0 :(得分:0)

您应该启用控制台的调试以了解问题。

控制台命令在.env文件的APP_ENV变量中定义的环境中运行,默认情况下为dev。它还读取APP_DEBUG值以打开或关闭“调试”模式(默认为1,打开)。

要在其他环境或调试模式下运行该命令,请编辑APP_ENV和APP_DEBUG的值。