tp5.1项目开始的优化和配-置(全局异常)
前言
首先开始一个项目的时候,我觉得还是首先应该构思整个项目,把整个局给布好,这样项目开始的时候,甚至项目迭代和更新维护起来更加的得心印手。
那么用tp5来作为后端API目标,首先得让整个项目正常的运行起来,有一个基本的验证层机制,和一个异常处理机制,甚至还可以加上一个数据返回处理机制,这样的话API接口的维护就显得有模有样了。
开启debug
这个对于我们开发者来说十分的关键,如果是生产模式下,就可以关闭,打开这个可以给我们详细的报错提醒,又便于我们查找错误,不过刚开始的时候这个是关闭的,需要我们自己去打开
配置数据库
这又是一个十分关键的点,我们要连接到我们的数据库,就要在这个配置文件中把相应的配置填写好
还有一个数据库的小配置,把这个配置好了,可以对数据库中时间戳字段实现字段写入(像我开发的时候就会经常用到)
全局异常处理
如果要使用自定义的全局异常处理机制,需要在配置文件app.php的最下面的一行中添加你的自定义异常处理类
// 异常处理handle类 留空使用 \think\exception\Handle
'exception_handle' => '\app\lib\exception\ExceptionHandler',
两个文件
我把代码贴一下
BaseException.php
<?php
namespace app\lib\exception;
use Exception;
class BaseException extends Exception
{
public $code = 400;
public $msg = '异常';
public $errorCode = 20000;
public function __construct($params = []){
if (!is_array($params)) return;
if (array_key_exists('code',$params)) $this->code = $params['code'];
if (array_key_exists('msg',$params)) $this->msg = $params['msg'];
if (array_key_exists('errorCode',$params)) $this->errorCode = $params['errorCode'];
}
}
ExceptionHandler.php
<?php
namespace app\lib\exception;
use Exception;
use think\exception\Handle;
class ExceptionHandler extends Handle
{
public $code;
public $msg;
public $errorCode;
/**
* 重写render方法
* @param Exception $e
* @return \think\Response|\think\response\Json
*/
public function render(Exception $e){
if ($e instanceof BaseException) {
$this ->code = $e->code;
$this ->msg = $e->msg;
$this ->errorCode = $e->errorCode;
}else{
// debug开启,显示默认的异常
if (config('app.app_debug')) return parent::render($e);
$this ->code = 500;
$this ->msg = '服务器异常';
$this ->errorCode = '10000';
}
$res = [
'msg'=>$this->msg,
'errorCode'=>$this->errorCode
];
return json($res,$this->code);
}
}
这两个文件封装好了之后,就可以在我们的项目中进行调用le,例如
//抛出异常
throw new BaseException(['code'=>400,'msg'=>'签到失败','errorCode'=>30005]);
使用命令创建控制器
这是一个小技巧,可以进行快速的创建项目文件·
封装验证层
创建一个基类验证器,BaseValidate.php,继承validate,在其他的控制器里面就继承BaseValidate就可以了,在基类里面添加以下的代码
public function goCheck($scene = false){
// 获取请求传递过来的所有参数
$params = request()->param();
// 开始验证
$check = $scene ?
$this->scene($scene)->check($params):
$this->check($params);
if (!$check) {
throw new BaseException(['msg'=>$this->getError(),'errorCode'=>10000,'code'=>400]);
}
return true;
}
使用
// 验证参数
(new UserValidate())->goCheck('sendCode');
另外在tp5.1的框架中,有详细的文档说明,这里贴一下链接
https://www.kancloud.cn/manual/thinkphp5_1/354102
感谢ThinkPHP!