如何通过模块/插件机制,灵活组织Laravel工程
有时候我们需要把 Laravel 工程拆分成不同的模块或功能管理,可以分配不同的工程师负责不同的模块,也方便在不同的工程之间相互使用。
有一个nwidart/laravel-modules
就是做为modules来管理的,但有些问题:
生成的包里过于依赖
nwidart/laravel-modules
,比如自动加载过程和module_path
的函数依赖,造成生产环境也不能脱离,还有modules.json等一些啰嗦的多余文件。其实一点意义都没有,因为包通过Laravel Service Provider
标准管理即可。目录结构和laravel有些出入,比如Models,他起名叫 Entities。
比如用
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.php
use Modules\NewPackage\Providers\NewPackageServiceProvider;
class AppServiceProvider extends ServiceProvider
public function register()
{
$this->app->register(NewPackageServiceProvider::class);
...
}
or
Edit config/app.php
, add Modules\NewPackage\Providers\NewPackageServiceProvider::class
to providers.
'providers' => [
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
Modules\NewPackage\Providers\NewPackageServiceProvider::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
其他可参考:
Github:package-make,喜欢就给个 star 哦
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: