有時候我們需要把 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 協議》,轉載必須註明作者和本文連結