【问题标题】:In Symfony migration class, get option that you entered in console migration command在 Symfony 迁移类中,获取您在控制台迁移命令中输入的选项
【发布时间】:2023-04-04 19:31:01
【问题描述】:

我创建了自定义命令,并在其中添加了一个新属性。

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 {
        ...
    }
}

【问题讨论】:

  • 我不太确定是否要生成迁移,在这种情况下,您必须实际扩展您正在扩展的命令,但程度要深得多。 ...或者您是否想使用该参数执行迁移,那么您将扩展错误的命令,并且可能会覆盖教义迁移系统中的多个位置,这可能是没有人真正想做或做过的事情(只是在这里猜测,但我认为没有真正的原因)。 - 在不相关的注释php.net/manual/en/reserved.variables.argv.php 可能适用于肮脏的黑客。
  • 我使用自定义模板并扩展 AbstractMigration 以获得更多选项。就像在我的 Command 类中一样,我有输入变量,所以我可以做 $input->getArgument('entity'); 我希望有一些简单的方法可以在迁移类中获得相同的值。

标签: symfony doctrine symfony4


【解决方案1】:

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

为了传递它,我可能会走惰性路线,只创建一个依赖注入到命令(通过构造函数)和迁移(通过容器,通过迁移container-aware)的服务 - 类似的东西到Request的属性包。在命令端,我会添加参数/选项,显然在迁移端,从同一个服务中读取它们,可以从容器中获取。

我相信这种方法需要最少的代码,但是,它有点 hacky。一种可能更简洁的方法是创建一个新的迁移类,其中这些参数由迁移/执行命令设置,这可能意味着深入迁移库并复制一些行为或以某种方式找出如何挂钩或覆盖迁移执行过程(这是 - 就我一眼就能看出 - 令人讨厌,但可能有一些你可以装饰的对象)。

【讨论】:

    猜你喜欢
    • 2020-09-23
    • 2018-12-28
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多