重要通知: 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 再加上程序设计(继承、多态) 将尽可能提升代码的复用性,远离复制粘贴 : )
本章小知识点: