Laravel 12子域名多租户路由骨架需三步打通:1. 在RouteServiceProvider中用Route::domain('{tenant}.example.com')分组加载tenant.php;2. 将租户路由移至routes/tenant.php并加tenant中间件;3. 编写InitializeTenant中间件解析并挂载租户对象到$request,配合Nginx泛域名配置和SESSION_DOMAIN=.example.com完成闭环。

用 Codex 快速搭建 Laravel 12 子域名多租户路由骨架,核心不是装一堆包,而是按 Laravel 原生机制把三件事串通:域名识别、路由分组、租户上下文初始化。Codex 在这里指代的是“清晰、可复现的配置路径”,不是某个工具名——它强调用最少改动、最标准写法一次到位。
第一步:在 RouteServiceProvider 中注册子域名路由组
必须在 app/Providers/RouteServiceProvider.php 的 mapWebRoutes() 方法里写,不能丢进 routes/web.php ——否则 {tenant} 参数根本不会被解析。
- 删掉或注释掉原
require base_path('routes/web.php');这一行(先腾出位置) - 插入如下代码(以
tenant.example.com为例):
Route::domain('{tenant}.example.com')->group(function () {
require base_path('routes/tenant.php');
});这样所有 xxx.example.com 请求都会进入 tenant.php,且 $request->route('tenant') 可直接取值。
第二步:拆分租户专属路由到独立文件
新建 routes/tenant.php,只放租户逻辑相关的路由,保持主路由干净:
- 用
middleware('tenant')包裹整个 group,确保每次请求都走租户初始化流程 - 示例:
use Illuminate\Support\Facades\Route;
Route::middleware(['web', 'tenant'])->group(function () {
Route::get('/', [TenantHomeController::class, 'index']);
Route::get('/dashboard', [TenantDashboardController::class, 'show']);
});第三步:写一个轻量中间件做租户挂载
运行 php artisan make:middleware InitializeTenant,在 handle() 中做三件事:
依托用户知识库、工作记录、项目文件、会议纪要、表格、图片、文稿及评审材料生成高质量职场汇报演示文稿。适用于试用期考核、转正述职、晋升答辩、年度总结、项目进度汇报、项目评审、方案说服、资源申请、部门规划、业务优化或管理决策类 PPT 制作;Codex 需先明确汇报目标、提取佐证材料、生成规范说明书、适配汇报时长、搭建内容大纲、设计每页幻灯片内容,最后生成附带讲稿与佐证材料核对清单的 PPTX 文件。
- 从路由参数取
$tenant = $request->route('tenant') - 查数据库确认该租户存在且启用(比如查
tenants表) - 把租户信息存进 request 属性:
$request->attributes->set('tenant', $tenantModel),后续控制器可直接用$request->tenant
别在这里切数据库连接——留到模型全局作用域或服务容器绑定阶段更安全。
第四步:配好 Web 服务器和本地环境
没这步,前面全白搭:
- Nginx 配置
server_name *.example.com;,确保泛解析请求真能抵达 Laravel - 开发时改
/etc/hosts,加几行:127.0.0.1 tenant1.example.com、127.0.0.1 tenant2.example.com - Session 共享?设
SESSION_DOMAIN=.example.com(注意开头的点)
跑一遍 php artisan route:clear,再访问 tenant1.example.com 就能验证骨架是否跑通。










