有时候我们需要把 Laravel 工程拆分成不同的模块或功能管理,可以分配不同的工程师负责不同的模块,也方便在不同的工程之间相互使用。
有一个 nwidart/laravel-modules 就是作为 modules 来管理的,但有些问题:
1. 生成的包里过于依赖 nwidart/laravel-modules,比如自动加载过程和 module_path 的函数依赖,造成生产环境也不能脱离,还有 modules.json 等一些啰嗦的多余文件。其实一点意义都没有,因为包通过 Laravel Service Provider 标准管理即可。
2. 目录结构和 laravel 有些出入,比如 Models,他起名叫 Entities。
3. 比如用 make-command,生成的 Command 和 Laravel 脚手架的内容也不一样,内容还有些啰嗦。
这个包解决了上面的问题,而且还可以制作标准的 composer package。
在我们实际项目里一直作为模块的管理方式,也可以考虑做成动态的插件机制。
一、安装
composer require --dev zencodex/package-make
二、使用方法
// Modules/NewPackagephp artisan package:make NewPackage// 目录结构:Modules/NewPackage├── Config│ └── config.php├── Console│ └── UserCommand.php├── Database│ ├── Migrations│ ├── Seeders│ │ └── NewPackageDatabaseSeeder.php│ └── factories├── Http│ ├── Controllers│ │ └── NewPackageController.php│ ├── Middleware│ ├── Requests│ └── Resources│ └── UserResource.php├── Models│ └── User.php├── Providers│ ├── NewPackageServiceProvider.php│ └── RouteServiceProvider.php├── Resources│ ├── assets│ │ ├── js│ │ │ └── app.js│ │ └── sass│ │ └── app.scss│ ├── lang│ └── views│ ├── index.blade.php│ └── layouts│ └── master.blade.php├── Routes│ ├── api.php│ └── web.php├── Tests│ ├── Feature│ └── Unit├── composer.json├── package.json└── webpack.mix.js
三、项目里使用方法
option 1:
// app/Providers/AppServiceProvider.phpuse ModulesNewPackageProvidersNewPackageServiceProvider;class AppServiceProvider extends ServiceProvider public function register() { $this->app->register(NewPackageServiceProvider::class); ... }
or Edit config/app.php, add ModulesNewPackageProvidersNewPackageServiceProvider::class to providers.
'providers' => [ IlluminateValidationValidationServiceProvider::class, IlluminateViewViewServiceProvider::class, ModulesNewPackageProvidersNewPackageServiceProvider::class ... ],
option 2:
// 1. edit composer.json, add following"repositories": [ { "type": "path", "url": "Modules/*" }]// use private package or gitlab"repositories": [ { "type": "vcs", "url": "git@gitlab.example.com:/newpackage.git" }]// 2. composer require local path package (replace package/newpackage to yours)composer require package/newpackage
其他详细内容可以参考我的 gihub