ThinkPHP Vue前后端分离教程

雨婷酱_2123

雨婷酱_2123

2026-06-16

981人浏览

原创

ThinkPHP路由不返回JSON需禁用模板渲染并显式调用json(),RESTful路由应分组定义,控制器末尾必须return json($data),避免使用fetch()等视图方法。

thinkphp vue前后端分离教程

ThinkPHP 路由不返回 JSON?关掉模板渲染和默认控制器

ThinkPHP 默认走 index/index 控制器并尝试渲染 HTML 模板,前后端分离下这会直接报 500 或输出乱码。必须显式禁用模板机制,让接口只返回纯 JSON。

在路由配置(route/route.php)中,不要用 Route::rule('/*', 'index/index') 这类兜底写法;而是按资源定义 RESTful 路由:

Route::group('api', function () {
    Route::post('login', 'Auth/login');
    Route::get('user', 'User/info')->middleware('auth');
})->cross(false);

每个控制器方法末尾必须显式调用 json(),不能依赖自动输出:

public function login()
{
    $data = $this->request->param(); // 注意:仅对表单有效
    return json(['token' => 'xxx', 'code' => 200]);
}
  • 控制器继承 think\Controller 即可,无需额外 base 类
  • 别在控制器里调 $this->fetch() 或任何视图相关方法
  • 如果用了中间件做统一响应封装,确保它不拦截或覆盖 json() 返回值

Vue 发 POST 请求,ThinkPHP 收不到参数?分清 param() 和 input()

this->request->param() 只解析 application/x-www-form-urlencoded 和 multipart/form-data;而 Axios 默认发的是 application/json,这时 param() 必然为空。

两种解法,选其一即可:

  • 前端改用表单格式:在 Axios 请求中加 transformRequest + qs.stringify(),并手动设 Content-Type: application/x-www-form-urlencoded
  • 后端改用原始读取:input('username') 或 json_decode($this->request->getContent(), true)

推荐后者——更符合 API 设计直觉,也避免前端重复处理序列化:

public function login()
{
    $raw = $this->request->getContent();
    $data = json_decode($raw, true) ?: [];
    $username = $data['username'] ?? '';
    $password = $data['password'] ?? '';
    // 后续逻辑...
}

注意:$this->request->input() 在 TP6/8 中已废弃,别用。

蓝湖代码转vue2.0+element-ui
蓝湖代码转vue2.0+element-ui

将静态 Vue 页面(index.vue)改造为动态页面(Custom.vue);稿源仅限 index.vue、其引用的 CSS 与资源路径,禁止参考仓库内其他文件。Invoke when user wants to transform a static Vue page into a dynamic data-driven page with Element UI components.

下载

跨域请求被拦、OPTIONS 404?用 think-cors 扩展,别手写 header

手动在中间件里写 $response->header('Access-Control-Allow-Origin', '*') 看似简单,但漏掉 OPTIONS 预检、credentials 冲突、expose-headers 等细节,上线就崩。

正确路径是统一用官方扩展:

composer require topthink/think-cors

然后在 config/cors.php 中配死域名(生产环境严禁用 *):

return [
    'origin'           => ['https://your-vue-app.com'],
    'allow_credentials'=> true,
    'allow_methods'    => ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
    'allow_headers'    => ['Content-Type', 'Authorization', 'X-Requested-With'],
];
  • 若前端用 JWT,allow_credentials 可设为 false,改用 Authorization: Bearer xxx 传 token
  • Vue 的 Axios 请求必须加 withCredentials: true(仅当后端允许 credentials 时才需要)
  • TP 默认没注册 OPTIONS 路由,但 think-cors 会自动拦截并返回 204,不用额外补空路由

验证码总校验失败?Session 在跨域下根本不可用

前端请求 /captcha 图片,后端往 Session 写 captcha.key;提交时再从 Session 读——这套逻辑在跨域下必然失效:浏览器不发 Cookie,Session ID 断连,$this->session->get() 永远是 null。

必须放弃 Session 绑定,改用可显式传递的唯一 ID:

  • 生成验证码接口返回 {captcha_id: "abc123", image: "data:image/png;base64,..."}
  • 前端把 captcha_id 存进表单 hidden 字段或请求头
  • 校验接口接收 captcha_id 和用户输入的 code,查 Redis key captcha:abc123
  • 查完立刻 DEL captcha:abc123,TTL 设 120 秒足够

别用文件或数据库存验证码——Redis 原子性好、过期自动清理、性能无压力。ThinkPHP 自带 cache('redis') 就能直接用。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

thinkphp vue php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2843

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

7090

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6606

10

php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

12164

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6961

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2215

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

4428

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

5154

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

4051

9

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程