重要通知: Laravel + 小程序的開源電商版本源碼已經在 github 上拉,歡迎提交 issue 和 star :)
開源電商 Server 端: Laravel API源碼
開源電商 client 端:小程序源碼
iBrand 系統在搭建的時候,最注重的就是可複用性,但願經過產品+項目的方式積累下來的代碼可以重複使用在不一樣類型的項目上,因此咱們把公用的功能都獨立成 package
php
本教程就是基於目前商用的 iBrand 新零售系統抽離出來的,經過一個截圖咱們來看目前商用系統的架構設計。html
每個 Component 都是獨立 package
,咱們經過 Composer
把它們組裝起來。目前咱們經過 Satis
服務把這些 package
部署在咱們私有服務器上。laravel
使用 Satis 搭建私有的 Composer 包倉庫
本次教程咱們也將繼續這種模式來進行敏捷迭代開發。git
wikimedia/composer-merge-plugin
咱們須要依賴 wikimedia/composer-merge-plugin
工具包,經過composer
安裝github
composer require wikimedia/composer-merge-plugin
在開發階段全部的模塊都放在 modules
文件夾下,所以須要在項目根目錄新建 modules
文件夾。web
接下來以添加一個 server
模塊爲例來演示模塊的添加,而且在下章 安裝 dingo API
會使用。chrome
按照下面結構創建好相關文件和文件夾json
api-tutorial-source ├── app ├── ... └── modules └── server ├── LICENSE ├── README.md ├── composer.json ├── src │ └── Providers │ └── ServerServiceProvider.php └── tests
composer.json
Composer 基本用法
{ "name": "ibrand/server", "type": "library", "description": "ibrand api server", "keywords": [ "iBrand", "api", "server" ], "license": "MIT", "authors": [ { "name": "shjchen", "email": "ibrand.shjchen@foxmail.com" } ], "require": { "php": ">=7.0" }, "autoload": { "psr-4": { "iBrand\\Server\\": "src/" } }, "extra": { "laravel": { "providers": [ "iBrand\\Server\\Providers\\ServerServiceProvider" ] } }, "minimum-stability": "dev", "prefer-stable": true }
每一個module
至少包含一個 ServiceProvider
,能夠經過 Artisan
命令來新建小程序
php artisan make:provider ServerServiceProvider
命令執行完畢後文件會默認建立在 app/Providers
下,咱們剪貼到 modules/server/src/Providers
文件夾下。segmentfault
composer.json
打開項目的 composer.json
文件:
api-tutorial-source ├── app ├── ... └── composer.json
找到 extra
添加 merge-plugin
內容以下:
"extra": { "laravel": { "dont-discover": [ ] }, "merge-plugin": { "include": [ "modules/*/composer.json" ], "require": [ ], "recurse": true, "replace": false, "ignore-duplicates": false, "merge-dev": true, "merge-extra": false, "merge-extra-deep": false, "merge-scripts": false } },
經過 include
指令把 server
module 下的 composer.json
合併進來。這樣項目就可以自動識別 server
包下的命名空間。
"include": [ "modules/*/composer.json" ],
執行 composer update --lock
打開 config/app.php
文件 providers
數組添加
/* * Package Service Providers... */ iBrand\Server\Providers\ServerServiceProvider::class,
打開routes/web.php
, 經過 dd(app())
來看下 ServerServiceProvider
是否註冊成功
Route::get('/', function () { dd(app()); return view('welcome'); });
chrome 打開 http://api.ibrand.test/
, 在 loadedProviders
數組中咱們發現了 iBrand\Server\Providers\ServerServiceProvider
的蹤跡。
在後續的教程中,咱們將不斷使用這種方式把各個 modules 添加到咱們的項目中來,經過 composer 再加上程序設計(繼承、多態) 將盡可能提升代碼的複用性,遠離複製粘貼 : )
本章小知識點: