如何使用 nwidart 包重命名模块?

问题描述 投票:0回答:1

我正在使用

nwidart/laravel-modules
包为我的 Laravel 项目设置模块化结构,并且我有一个名为
Company
的模块,我想将其重命名为
Facility
但我不太确定所需的步骤,并且该文档没有提及执行此操作所需的步骤。

php laravel laravel-modules
1个回答
0
投票

假设您有一个名为

Company
的模块,您想将其重命名为
Facility
,那么您需要执行以下操作:

  • 更改包含模块文件的文件夹的名称

  • 重命名

    modules_statuses.json
    文件内的模块,例如更改:

{
    "Company": true
}

进入:

{
    "Facility": true
}
  • 确保替换模块内所有类中的命名空间定义,以及代码中使用重命名模块中的类的任何位置,例如,更改:
use Modules\Company\Models\Company;

进入:

use Modules\Facility\Models\Company;

建议进行这些更改的地方是模型类、控制器类、存储库类、服务类、数据库播种器和迁移文件。 PHPStorm 等受人尊敬的 IDE 具有出色的重构功能,可以自动更新所有类中的命名空间定义。

  • 在模块的
    RouteServiceProvider
    类中,确保更新对要从正确路径加载的路由文件的调用,例如,更改:
protected function mapApiRoutes(): void
    {
        Route::middleware('api')->prefix('api')->name('api.')->group(module_path('Company', '/routes/api.php'));
    }

进入:

protected function mapApiRoutes(): void
    {
        Route::middleware('api')->prefix('api')->name('api.')->group(module_path('Facility', '/routes/api.php'));
    }
  • 在主模块服务提供者类中,确保更新
    $moduleName
    $moduleNameLower
    属性:
protected string $moduleName = 'Facility';
protected string $moduleNameLower = 'facility';
  • 在模块的
    config.php
    文件内,更新
    name
    键以反映模块的新名称:
return [
    'name' => 'Facility',
];
  • 在模块的
    composer.json
    文件中(模块目录中的文件,而不是项目根目录中的文件),请确保更新使用的命名空间,例如更改:
{
    "name": "nwidart/company",
    "description": "",
    "authors": [
        {
            "name": "Nicolas Widart",
            "email": "[email protected]"
        }
    ],
    "extra": {
        "laravel": {
            "providers": [],
            "aliases": {

            }
        }
    },
    "autoload": {
        "psr-4": {
            "Modules\\Company\\": "app/",
            "Modules\\Company\\Database\\Factories\\": "database/factories/",
            "Modules\\Company\\Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Modules\\Company\\Tests\\": "tests/"
        }
    }
}

进入:

{
    "name": "nwidart/facility",
    "description": "",
    "authors": [
        {
            "name": "Nicolas Widart",
            "email": "[email protected]"
        }
    ],
    "extra": {
        "laravel": {
            "providers": [],
            "aliases": {

            }
        }
    },
    "autoload": {
        "psr-4": {
            "Modules\\Facility\\": "app/",
            "Modules\\Facility\\Database\\Factories\\": "database/factories/",
            "Modules\\Facility\\Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Modules\\Facility\\Tests\\": "tests/"
        }
    }
}

  • 在模块的
    module.json
    文件中,还要确保更新模块的名称和模块服务提供者的命名空间,例如更改:
{
    "name": "Company",
    "alias": "company",
    "description": "",
    "keywords": [],
    "priority": 0,
    "providers": [
        "Modules\\Company\\Providers\\CompanyServiceProvider"
    ],
    "files": []
}

进入:

{
    "name": "Facility",
    "alias": "facility",
    "description": "",
    "keywords": [],
    "priority": 0,
    "providers": [
        "Modules\\Facility\\Providers\\CompanyServiceProvider"
    ],
    "files": []
}
  • 运行
    php artisan optimize:clear
    命令清除所有配置的可能有问题的缓存。
  • 运行
    composer dump-autoload
    重新创建自动加载器,这非常重要,如果没有它,您将看到许多使用不正确的命名空间加载类的错误。

您可能需要考虑一些额外的检查

  • 如果您正在使用多态关系,或者您使用的包可能在其工作中隐式使用多态关系(例如
    zoha/laravel-meta
    spatie/laravel-medialibrary
    ),您将需要转到数据库并更新
    model_type
    字段指向正确的命名空间,这是避免现有数据出现问题所必需的。如果您使用
    morphMap()
    model_type
    字段内的值指定自定义名称,则可以安全地忽略此设置。
© www.soinside.com 2019 - 2024. All rights reserved.