PHP: thinkPHP踩坑记录(实现API接口以及处理莫名其妙的500问题)

由于各类缘由开始学习PHP,而且要在两周内可以对PHP项目进行二次开发,还好PHP够简单,至少入门很简单,很快就接触thinkPHP框架.php

在了解了路由匹配视图的规则以后,开始着手尝试编写API接口,期间因为没有好好查看官方的命名规范文档,致使出了些没必要要的错误.前端

命名规范文档: https://www.kancloud.cn/manual/thinkphp5/118007ajax

目前发现的可以输出json数据的关键字有两个:thinkphp

return   返回数据数据库

exit       返回并退出(结束进程)json

开发先后端分离开发中,GET请求比较好处理,经过 $_GET变量能够直接拿到查询字符串参数, 可是AJAX 的 请求体发送 json 数据不能经过 $_POST变量拿到, 听说该变量只能接受网页方式传递的表单数据.后端

想拿到ajax 传递的 json数据能够经过  浏览器

file_get_contents('php://input')

方式拿到,可是拿到的是字符串形式的json,须要解析:app

json_decode(file_get_contents('php://input'))

PHP提供一个Json类能够直接响应json格式的数据, 也能够经过 exit(json)的方式来输出json数据,只是exit执行以后会结束整个进程,这里须要注意.框架

另外因为exit函数接受的是字符串形式的参数,因此须要手动修改响应头:

1 header('Content-Type:application/json; charset=utf-8'); 2 exit(json_encode(json);

因此我就能够写一个基类了:

 1 <?php  2 namespace app\commonBase\controller;  3 
 4 class BaseController  5 {  6     protected function responseJson($code=200, $msg="success", $data=[], $status=200) {  7         $resp = array('code'=>$code, 'msg'=>$msg, 'data'=>$data);  8 
 9         // 返回JSON数据格式到客户端 包含状态信息
10         header('Content-Type:application/json; charset=utf-8'); 11         return json($resp, $status); 12  } 13 
14     // 解析 ajax 请求体数据
15     protected function ajaxJsonData() { 16         return json_decode(file_get_contents('php://input')); 17  } 18     
19     // 获取请求体数据
20     protected function bodyParams($key='') { 21         $body = $this->ajaxJsonData(); 22         if (isset($body[$key])) { 23             return $body[$key]; 24         } else { 25             return null; 26  } 27  } 28 
29     // 解析查询字符串数据
30     protected function queryParams($key='') { 31         if (isset($_GET[$key])) { 32             return $_GET[$key]; 33         } else { 34             return null; 35  } 36  } 37 }

 

多是受Python的框架风格影响较深,总喜欢将后台业务代码再进行细化, 具体的数据库操做,请求数据解析,权限管理等逻辑进行分离, 方便管理和维护.

 

除了上面的问题以外,还有一个很诡异的问题,就是个人接口运行正常,也能正常响应,可是前端浏览器显示状态码为 500;

找了下网上的资料,发现时日志写入权限的问题,查看了下Apache运行日志:

问题出在这个位置:

第46行,若是路径不是目录,则建立目录,目录名什么的能够到源代码里面去找:

把这个文件夹的写入权限加上就能够了.

public/runtime文件夹

相关文章
相关标签/搜索