如何在yii2中正确指定迁移命名空间类?

时间:2017-06-27 05:49:55

标签: yii2 migrate

有人可以解释我如何正确指定我的modules migration namespaces?正如我在文档中看到的那样:

return [
'controllerMap' => [
    'migrate' => [
        'class' => 'yii\console\controllers\MigrateController',
        'migrationNamespaces' => [
            'app\migrations', // Common migrations for the whole application
            'module\migrations', // Migrations for the specific project's module
            'some\extension\migrations', // Migrations for the specific extension
            ],
        ],
    ],
];

但是没有解释我应该在哪个文件中编写命令。我在config.php中尝试过,如:

    'controllerMap' => [
    'migrate' => [
        'class' => 'yii\console\controllers\MigrateController',
        'migrationNamespaces' => [
            'app\modules\adBoard\migrations',
        ],

但我不知道应该写哪个控制器类。有人能告诉我在哪个文件中我必须指定它以及如何正确指定它?

3 个答案:

答案 0 :(得分:1)

如果您参考此文档

  

全局配置命令

     

而不是输入相同的选项   每次运行迁移命令时,都可以配置它   在应用程序配置中一劳永逸,如下所示:

return [
     'controllerMap' => [
         'migrate' => [
             'class' => 'yii\console\controllers\MigrateController',
             'migrationTable' => 'backend_migration',
         ],
     ], ];
  

使用上述配置,每次运行migration命令时,都会使用backend_migration表进行记录   迁移历史。您不再需要通过   migrationTable命令行选项。

     

命名空间迁移

     

从2.0.10开始,您可以使用命名空间   迁移课程。您可以指定迁移列表   通过migrationNamespaces命名空间。使用命名空间   迁移类允许您使用多个源位置   迁移。例如:

 return [
     'controllerMap' => [
         'migrate' => [
             'class' => 'yii\console\controllers\MigrateController',
             'migrationNamespaces' => [
                 'app\migrations', // Common migrations for the whole application
                 'module\migrations', // Migrations for the specific project's module
                 'some\extension\migrations', // Migrations for the specific extension
             ],
         ],
     ], ];

此配置应放在您的console / config / main.php

但是对于名称空间的迁移记忆,从2.0.10开始

答案 1 :(得分:1)

取决于您的yii2-template应用程序(basicadvanced),“控制台”特定设置的位置位于不同的目录中。

对于基本模板,从<app>/config/console.php文件中获取控制台设置。

对于高级模板,您应该编辑<app>/console/config/main.php文件。

请记住,您的控制台设置不会影响Web设置,因此如果您想在整个项目中注册某个组件,则必须在两个文件中复制它。

P.S。我想添加一个关于高级模板的详细信息,它是针对前端后端子应用程序的常用设置在<app>/common/config/main.php中,但这些设置在控制台命令中并不常见。

答案 2 :(得分:0)

我想分享我在 Yii2 命名空间迁移方面的经验。

场景

  1. 我正在使用高级模板。
  2. 我在 console/migrations 文件夹中有 100 多个旧迁移。
  3. 我有一个包含命名空间迁移的新扩展。
  4. 我在旧文件夹 console/migrations 中有新的迁移。
  5. 我想在新文件夹 console/migrations/namespaced 中创建具有命名空间的未来迁移。我想保持位于 console/migrations 的所有旧迁移完整无缺。

console/config/main.php 配置对我有用。

return [
'controllerMap' => [
    'migrate' => [
        'class' => \yii\console\controllers\MigrateController::class,
        'migrationNamespaces' => [
            'console\migrations\namespaced',
            'yii\swiftsmser\migrations'
        ]
    ],
],
//.... more configurations
];

通过上述配置,当我执行 yii migrate 时,它包括所有上述文件夹。

注意:创建新的迁移。只要确保使用如下命令即可。

yii migrate/create console\\migrations\\namespaced\\DLTTemplatesForSMS