重要通知: Laravel + 小程序的开源电商版本源码已经在 github 上拉,欢迎提交 issue 和 star :)
开源电商 Server 端: Laravel API源码
开源电商 client 端:小程序源码
iBrand 系统在搭建的时候,最注重的就是可复用性,希望通过产品+项目的方式积累下来的代码能够重复使用在不同类型的项目上,所以我们把公用的功能都独立成 package
本教程就是基于目前商用的 iBrand 新零售系统抽离出来的,通过一个截图我们来看目前商用系统的架构设计。
每一个 Component 都是独立 package
,我们通过 Composer
把它们组装起来。目前我们通过 Satis
服务把这些 package
部署在我们私有服务器上。
使用 Satis 搭建私有的 Composer 包仓库
本次教程我们也将继续这种模式来进行敏捷迭代开发。
安装 wikimedia/composer-merge-plugin
我们需要依赖 wikimedia/composer-merge-plugin
工具包,通过composer
安装
composer require wikimedia/composer-merge-plugin
添加模块
在开发阶段所有的模块都放在 modules
文件夹下,因此需要在项目根目录新建 modules
文件夹。
接下来以添加一个 server
模块为例来演示模块的添加,并且在下章 安装 dingo API
会使用。
按照下面结构建立好相关文件和文件夹
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": "[email protected]"
}
],
"require": {
"php": ">=7.0"
},
"autoload": {
"psr-4": {
"iBrand\\Server\\": "src/"
}
},
"extra": {
"laravel": {
"providers": [
"iBrand\\Server\\Providers\\ServerServiceProvider"
]
}
},
"minimum-stability": "dev",
"prefer-stable": true
}
ServerServiceProvider
每个module
至少包含一个 ServiceProvider
,可以通过 Artisan
命令来新建
php artisan make:provider ServerServiceProvider
命令执行完毕后文件会默认创建在 app/Providers
下,我们剪贴到 modules/server/src/Providers
文件夹下。
识别模块
合并 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
注册ServiceProvider
打开 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 再加上程序设计(继承、多态) 将尽量提高代码的复用性,远离复制粘贴 : )
本章小知识点:
- 了解 iBrand 项目基础架构
- 学习 composer.json 的基本使用
- 了解 module/package 基础开发方式