把Laravel和Lumen联合起来作为一个项目
前言
后台
用: Dcat Adminapi
用: lumen
那么需要分两个项目才行了, 为什么不直接用 laravel?
心理在作怪。
项目目录结构
+---admin_laravel // 后台 laravel
+---api_lumen // api lumen
+---.env // 共用的.env
+---Model // 共用模型
+---composer.json // 共用composer.json (共用模型实现)
+---README.md
改配置
改.env路径
都是改 bootstrap/app.php
。
Laravel
:
$app->loadEnvironmentFrom(
DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'.env'
);
Lumen
:
(new Laravel\Lumen\Bootstrap\LoadEnvironmentVariables(
dirname(dirname(__DIR__))
))->bootstrap();
这样都是加载相同的 .env
了。
改共用模型
改主目录的composer.json
思路:
合并主目录的 composer.json
,利用 composer
的 psr-4
来替换路径。
(name
和 authors
自行修改)
{
"name": "administrator/job_serve",
"authors": [
{
"name": "xxh",
"email": "449399575@qq.com"
}
],
"autoload": {
"psr-4": {
"Model\\": "Model"
}
},
"description": "larvel&lumen common composer.json"
}
合并主目录的composer.json
在admin_laravel
和 api_lumen
都执行:composer require wikimedia/composer-merge-plugin
添加配置到admin_laravel
api_lumen
的 composer.json
"extra": {
"merge-plugin": {
"require": [
"../composer.json"
],
"recurse": true,
"replace": false,
"ignore-duplicates": false,
"merge-dev": true,
"merge-extra": false,
"merge-extra-deep": false,
"merge-scripts": false
}
}
两个项目都执行composer dump-autoload
合并主目录的 composer.json
。
测试模型
api_lumen/routes/web.php
:
(laravel
也是一样的测试 不演示了。)
删除不必要的文件。
这一步 必须
做,因为他严重影响使用者的理解。
- 两个项目的
app\Models
文件夹 - 两个项目的
.env
文件 lumen
的database
文件夹,用laravel
的就行了。(不删也可以 影响不大)
后续的问题
使用者
需要对框架有一定理解才行。
比如这个 Illuminate\Database\Eloquent\Model
使用的时候,访问是那个文件?使用者
总得需要知道。
对于兼容:laravel
和 lumen
尽量选择相同版本的,他们两个扩展包很多都是差不多的。
比如laravel
和 lumen
的 session
共享是没问题的。
其他:
我想尽量小的改造,改造会增加其他人学习成本,见过一个 laravel
项目,
乱改造 Laravel
,找 model
provider
都不知道在哪里。
像apiato 这种大改造还好,因为有文档,而且专业。
本作品采用《CC 协议》,转载必须注明作者和本文链接
很好 :+1:,不妥协
不管怎么样,就是不打开两个vscode窗口,要是我,我就不用lumem了,毕竟我不会合起来「手动狗头」
@lyxxxh 为什么要用两个框架?