thinkphp5与6实现前后端分离的核心是前端静态托管+后端纯api架构,需切断session依赖、隔离路由路径、规范json输出、分层配置cors,并采用jwt等无状态登录机制。

ThinkPHP5 和 ThinkPHP6 实现前后端分离,核心不是换版本,而是统一遵循「前端静态托管 + 后端纯 API」的架构逻辑。两者的配置思路相似,但细节差异明显:TP6 更强调中间件、多应用和配置驱动,TP5 则依赖手动钩子与全局设置。关键不在于版本高低,而在于是否切断 Session 依赖、隔离路由路径、规范 JSON 输出、处理跨域请求。
路由必须严格区分前端页面与 API 接口
前端所有非 API 请求(如 /user/profile、/admin/dashboard)应全部 fallback 到单页入口(如 index.html),而所有 API 请求必须明确以 /api/ 或独立域名(如 api.example.com)开头,且不能被前端路由规则捕获。
-
TP6 推荐写法:在
config/route.php中关闭强制路由,用显式分组+域名隔离'url_route_must' => false;Route::domain('api', function () { Route::group('v1', function () { Route::get('user', 'api/v1/User/index'); }); }); -
TP5 注意避坑:别用
@^/:path$这类宽泛正则——它会把/api/login也重定向到前端控制器,导致接口 404;应改用更精确匹配,例如:'api/:controller/:action' => 'api/:controller/:action' - 前端构建产物(dist)必须由 Nginx/Apache 直接托管,不经过 ThinkPHP 路由;后端只响应
/api/开头的请求
接口输出必须干净、标准、无干扰
前后端分离下,后端不再渲染 HTML,只返回结构化 JSON。任何额外输出(如调试信息、echo、var_dump、BOM 头)都会破坏 JSON 格式,导致前端解析失败。
- TP6:在控制器中统一使用
return json($data);禁用模板引擎,在config/app.php中设'default_return_type' => 'json' - TP5:需在
config.php中设置'default_return_type' => 'json',并在控制器方法末尾显式return $this->fetch();改为return json($data); - 务必检查所有中间件、Hook、日志写入是否在响应前输出了内容;开启 PHP 的
output_buffering = Off可提前暴露输出问题
CORS 跨域必须分层配置,不能只写 *
浏览器发起跨域请求时,会先发 OPTIONS 预检。若后端未正确响应预检,后续请求直接被拦截——这是最常见的“接口通但收不到数据”原因。
- TP6 推荐用
think-cors中间件:安装后在app/middleware.php注册,并在config/cors.php中指定白名单域名,例如:'allow_origin' => ['http://localhost:8080', 'https://fe.example.com'] - TP5 可在公共控制器的
initialize()方法里手动 header:header('Access-Control-Allow-Origin: https://fe.example.com');;注意allow-credentials设为 true 时,allow-origin不可为* - 确保 OPTIONS 请求被拦截并返回 204 状态码,否则预检失败;TP6 中间件默认已处理,TP5 需自行判断
$this->request->isOptions()
登录态必须无状态,弃用 Session
前后端分离场景下,Session 依赖 Cookie 和同源策略,跨域时极易失效,且不利于集群部署。应改用 Token 机制,典型方案是 JWT + Redis 验证码。
- 验证码不能存 Session:改用 Redis 存储,前端请求
/api/captcha时,后端生成图片 + 唯一 token,将验证码值以 token 为 key 写入 Redis(过期时间 5 分钟) - 登录接口返回 JWT token,前端存在 localStorage 或内存中,后续请求通过
Authorization: Bearer xxx传入 - TP6 可配合
firebase/php-jwt插件实现签发与校验;TP5 需手动封装 decode/verify 逻辑,注意验证 exp、iat、nbf 时间戳
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











