有时候我们需要把 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/NewPackage
php 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 ServiceProviderpublic 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
其他可参考:
https://github.com/zencodex/package-makegithub.com
喜欢就给个 star 吧