在Symfony迁移类中,获取您在控制台迁移命令中输入的选项

时间:2019-09-18 13:06:05

标签: symfony doctrine symfony4

我创建了自定义Command,并在其中添加了新属性。

protected function configure() : void
{
    parent::configure();

    $this
        ->setName('doctrine:migrations:generate:entitychange')
        ->addOption('db', null, InputOption::VALUE_REQUIRED, 'The database connection to use for this command.')
        ->addOption('em', null, InputOption::VALUE_REQUIRED, 'The entity manager to use for this command.')
        ->addOption('shard', null, InputOption::VALUE_REQUIRED, 'The shard connection to use for this command.')
        ->addOption('entity',null,InputOption::VALUE_OPTIONAL,
            'Entity on which migration will be applied',
            'User');
}

现在,我希望在迁移中的up()down()函数中具有该参数的值。

例如:

public up(Schema $schema) : void
{
   // How to get this
   $attributOfMyInputValue = $getInputValueOfParam('entity')

    if($attributOfMyInputValue  === 'someValue') {
        $sql = 'some query';
        $this->addSql($sql);
    } else {
        ...
    }
}

1 个答案:

答案 0 :(得分:0)

我假设您想在此处编写最少的代码。因此,问题的第一部分是,要使理论迁移命令实际与该附加参数/选项一起执行和迁移。为此,您可能必须同时扩展两者并添加该参数/选项(或通过https://symfony.com/doc/current/console/calling_commands.html进行调用)

要继续下去,我可能会走懒的路线,然后创建一个服务,该服务依赖注入到命令(通过构造函数)和迁移(通过容器,通过进行迁移container-aware)中-类似于Request的属性包。在命令端,我将添加参数/选项,显然在迁移端,从同一服务读取它们,该服务可以从容器中获取。

我相信这种方法需要最少的代码量,但是,它有点笨拙。可能更干净的方法是创建新的迁移类,其中这些参数由migration / execute命令设置,这可能意味着深入迁移类库并复制某些行为,或者以某种方式找出如何挂钩或覆盖迁移执行过程(据我所知,这很烦人,但可能可以装饰一些对象)。