确认APP_DEBUG=false且APP_ENV=production后,选边界清晰的优惠券模块,新建modules/coupon-service目录并配置composer.json,通过AppServiceProvider加载autoload.php,再注册CouponServiceProvider接管路由。

你需要在Laravel项目中快速落地微服务拆分,不是理论推演,而是马上能跑通的实操路径——从单体应用里切出第一个可独立部署的服务模块,不改现有路由结构,不中断线上流量。
确认拆分前提与边界
先检查当前项目是否满足微服务拆分的最低运行条件:【APP_DEBUG=false 且 APP_ENV=production】。若 .env 中 APP_DEBUG=true,所有日志、异常堆栈将暴露敏感路径,后续服务间通信一旦出错,调试信息会直接打到前端页面,这是不可接受的安全风险。
打开终端,执行 php artisan tinker → 输入 app()->environment() 回车,确认返回值为 "production";再输入 config('app.debug'),必须为 false。
选一个业务边界清晰、数据表无跨域外键依赖的模块,比如「优惠券发放」:它只读写 coupon_codes、coupon_logs 表,不操作 users 或 orders 表,也不被其他模块通过 Eloquent 关系强引用。
创建独立微服务目录结构
在项目根目录下新建文件夹 modules/coupon-service,结构如下:
modules/coupon-service/
├── src/
│ ├── Controllers/
│ ├── Models/
│ └── Providers/
├── routes/api.php
└── composer.json
进入 modules/coupon-service 目录,执行 composer init → 全程按回车跳过描述、作者等字段,最后输入 vendor name 为 yourcompany,package name 为 coupon-service,type 填 library。
编辑 modules/coupon-service/composer.json,在 autoload → psr-4 下添加:
"YourCompany\CouponService\": "src/"
注册微服务并接管对应路由
第一步:在 app/Providers/AppServiceProvider.php 的 boot() 方法末尾添加:
if (file_exists(base_path('modules/coupon-service/autoload.php'))) {
require base_path('modules/coupon-service/autoload.php');
}
第二步:在 modules/coupon-service/src/Providers/CouponServiceProvider.php 中写入服务提供者:
namespace YourCompanyCouponServiceProviders;
use IlluminateSupportServiceProvider;
class CouponServiceProvider extends ServiceProvider {
public function register() {}
public function boot() {
$this->loadRoutesFrom(base_path('modules/coupon-service/routes/api.php'));
}
}
第三步:在 modules/coupon-service/autoload.php 中写死自动加载逻辑:
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/src/Providers/CouponServiceProvider.php';
app()->register(YourCompanyCouponServiceProvidersCouponServiceProvider::class);
【注意:autoload.php 必须放在 modules/coupon-service 根目录,不能放 src 下】
迁移原逻辑并启用 API 网关代理
把原来 app/Http/Controllers/CouponController.php 的全部方法复制进 modules/coupon-service/src/Controllers/CouponController.php,但需修改命名空间为 YourCompany\CouponService\Controllers。
编辑 modules/coupon-service/routes/api.php:
use IlluminateSupportFacadesRoute;
use YourCompanyCouponServiceControllersCouponController;
Route::prefix('api/v1/coupons')->group(function () {
Route::get('/', [CouponController::class, 'index']);
Route::post('/issue', [CouponController::class, 'issue']);
});
回到主项目 routes/api.php,注释掉原有 /api/v1/coupons 路由定义 —— 【这一步必须做,否则 Laravel 会报 Duplicate route error】。
最后执行 composer dump-autoload,然后访问 http://your-app.test/api/v1/coupons,接口应正常返回数据,且请求日志显示控制器路径已指向 modules/coupon-service/src/Controllers/CouponController。


















