PHP: thinkPHP踩坑记录(实现API接口以及处理莫名其妙的500问题)
因为各种原因开始学习PHP,并且要在两周内能够对PHP项目进行二次开发,还好PHP够简单,至少入门很简单,很快就接触thinkPHP框架.
在了解了路由匹配视图的规则之后,开始着手尝试编写API接口,期间由于没有好好查看官方的命名规范文档,导致出了些不必要的错误.
命名规范文档: https://www.kancloud.cn/manual/thinkphp5/118007
目前发现的能够输出json数据的关键字有两个:
return 返回数据
exit 返回并退出(结束进程)
开发前后端分离开发中,GET请求比较好处理,通过 $_GET变量可以直接拿到查询字符串参数, 但是AJAX 的 请求体发送 json 数据不能通过 $_POST变量拿到, 据说该变量只能接受网页方式传递的表单数据.
想拿到ajax 传递的 json数据可以通过
file_get_contents('php://input')
方式拿到,但是拿到的是字符串形式的json,需要解析:
json_decode(file_get_contents('php://input'))
PHP提供一个Json类可以直接响应json格式的数据, 也可以通过 exit(json)的方式来输出json数据,只是exit执行之后会结束整个进程,这里需要注意.
另外由于exit函数接受的是字符串形式的参数,所以需要手动修改响应头:
header('Content-Type:application/json; charset=utf-8');
exit(json_encode(json);
所以我就可以写一个基类了:
<?php
namespace app\commonBase\controller; class BaseController
{
protected function responseJson($code=200, $msg="success", $data=[], $status=200) {
$resp = array('code'=>$code, 'msg'=>$msg, 'data'=>$data); // 返回JSON数据格式到客户端 包含状态信息
header('Content-Type:application/json; charset=utf-8');
return json($resp, $status);
} // 解析 ajax 请求体数据
protected function ajaxJsonData() {
return json_decode(file_get_contents('php://input'));
} // 获取请求体数据
protected function bodyParams($key='') {
$body = $this->ajaxJsonData();
if (isset($body[$key])) {
return $body[$key];
} else {
return null;
}
} // 解析查询字符串数据
protected function queryParams($key='') {
if (isset($_GET[$key])) {
return $_GET[$key];
} else {
return null;
}
}
}
可能是受Python的框架风格影响较深,总喜欢将后台业务代码再进行细化, 具体的数据库操作,请求数据解析,权限管理等逻辑进行分离, 方便管理和维护.
除了上面的问题之外,还有一个很诡异的问题,就是我的接口运行正常,也能正常响应,但是前端浏览器显示状态码为 500;
找了下网上的资料,发现时日志写入权限的问题,查看了下Apache运行日志:

问题出在这个位置:

第46行,如果路径不是目录,则创建目录,目录名什么的可以到源代码里面去找:

把这个文件夹的写入权限加上就可以了.
public/runtime文件夹
PHP: thinkPHP踩坑记录(实现API接口以及处理莫名其妙的500问题)的更多相关文章
- unionId突然不能获取的踩坑记录
昨天(2016-2-2日),突然发现系统的一个微信接口使用不了了.后来经查发现,是在网页授权获取用户基本信息的时候,unionid获取失败导致的. 在网页授权获取用户基本信息的介绍中(http://m ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- VUE使用微信JDK(附踩坑记录)
VUE使用微信分享SDK(附踩坑记录) 微信分享官方文档 安装JS-SDK npm i -S weixin-jsapi 引入包 ES5 写法 const wx = require('weixin-js ...
- SpringBoot + Shiro + shiro.ini 的踩坑记录
0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...
- manjaro xfce 18.0 踩坑记录
manjaro xfce 18.0 踩坑记录 1 简介1.1 Manjaro Linux1.2 开发桌面环境2 自动打开 NumLock3 系统快照3.1 安装timeshift3.2 使用times ...
- 移动端Video标签踩坑记录
需求 用户能在手机上上传视频并预览. 问题 上传完成后安卓下封面展示正常,ios下封面空白.如下图所示: 利用canvas截取视频第一帧发现,ios下截取到的第一帧一直是空白图片, 安卓正常. 后端利 ...
- CentOS7.4安装MySQL踩坑记录
CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...
- ubuntu 下安装docker 踩坑记录
ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...
- google nmt 实验踩坑记录
最近因为要做一个title压缩的任务,所以调研了一些text summary的方法. text summary 一般分为抽取式和生成式两种.前者一般是从原始的文本中抽取出重要的word o ...
随机推荐
- #1123-JSP隐含对象
JSP 隐含对象 JSP隐含对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐含对象也被称为预定义变量. JSP所支持的九大隐含对象: 对象,描述 reque ...
- The JavaScript this Keyword
https://www.w3schools.com/js/js_this.asp What is this? The JavaScript this keyword refers to the obj ...
- How To Use the Widget Factory 使用widget factory创建插件
To start, we'll create a progress bar that just lets us set the progress once. 创建一个基于widget factory ...
- 洛谷P4124 手机号码
传送 这题也就是条件限制多了点,也没有别的,套板子就好了 注意这里没有前导零,所以第一位是从1开始填 看注释叭 #include<iostream> #include<cstdio& ...
- DAY 4 下午
一些图论的知识(主要补充一下之前不了解的和比较重要) 竞赛图:完全图上的边加方向 仙人掌:每一条边至多属于一个环 前序:中左右 中序:左中右 后序:左右中 先加进去无向边 把每一个联通块看成一个大点 ...
- qbzt day4 下午
有向图的强连通分量 强联通:两个点之间可以互相到达 如果某个图任意两个点都是强联通的,那么称这个图强联通 如果一个图的子图是强联通的,那么称这个图是强联通子图 一个图的极大强联通子图被称作强连通分量 ...
- AppStore IPv6-only 解决--看我就够了
自2016年6月1日起,苹果要求所有提交App Store的iOS应用必须支持IPv6-only环境,背景也是众所周知的,IPv4地址已基本分配完毕,同时IPv6比IPv4也更加高效,向IPv6过渡是 ...
- selenium启动firefox打开导入向导问题解决
操作系统:win8-64位 火狐版本:40.0.2 问题描述:selenium启动firefox时,每次启动都提示我导入其他浏览器的页签,如下图所示 解决方法一: 到firefox的profiles. ...
- curl 使用 post 请求,传递 json 参数,下载文件
curl -X POST http://ip:8888/nacos/v1/cs/file/download -H "Accept: application/octet-stream" ...
- 2019_Chrome和ChromeDriver对应关系
Chrome和ChromeDriver对应关系 ChromeDriver下载地址:http://chromedriver.storage.googleapis.com/index.html Chrom ...