我正在使用
nwidart/laravel-modules
包为我的 Laravel 项目设置模块化结构,并且我有一个名为 Company
的模块,我想将其重命名为 Facility
但我不太确定所需的步骤,并且该文档没有提及执行此操作所需的步骤。
假设您有一个名为
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
字段内的值指定自定义名称,则可以安全地忽略此设置。