1、修改configuration里面的配置
- 异常处理handle类 留空使用 \think\exception\Handle
‘exception_handle’ => ‘app\exception\ExceptionHandler’, //这里是你自己的异常类重写的目录
<?php
/**
- Created by PhpStorm.
- User: admin
- Date: 2018/9/23
- Time: 22:43
*/
namespace app\exception;
use think\Exception;
use think\exception\Handle;
use think\Log;
use think\Request;
class ExceptionHandler extends Handle
{
private $code;
private $msg;
private $errorCode;
/**继承并重写Exception类
* @param Exception $ex
* @return \think\Response|\think\response\Json
*/
public function render(\Exception $ex)
{
if ($ex instanceof BaseException) {
$this->msg = $ex->code;
$this->msg = $ex->msg;
$this->errorCode = $ex->errorCode;
} else {
if ( config('app_debug') ) {
//显示页面错误,用于开发人员内部开发
return parent::render($ex);
} else {
$this->code = 500;
$this->msg = "服务器内部错误 !";
$this->errorCode = 999;
$this->recordErrorLog($ex);
}
}
$result = [
'errorCode' => $this->errorCode,
'msg' => $this->msg,
'request_url' => Request::instance()->url(),
];
return json($result, $this->code);
}
/** //自定义日志错误记录
* @param Exception $ex
*/
private function recordErrorLog(\Exception $ex)
{
Log::init([
'type' => 'File',
'path' => LOG_PATH,
'level' => ['error'],
]);
Log::record($ex->getMessage(), 'error');
}
}
--------------------------------------------------------------------------
<?php
/**
- Created by PhpStorm.
- User: admin
- Date: 2018/9/23
- Time: 22:47
*/
namespace app\exception;
use think\Exception;
/*
-
restful API 最佳实践
-
POST 创建
-
PUT 更新
-
GET 查询
-
DELETE 删除
-
状态码:404(当前请求的页面不存在) 400(当前的参数错误) 200(查询成功!)
-
201 202(更新成功!) 401(未授权) 403(当前的资源被禁止) 500(服务器未知错误)
-
错误码:自定义的错误ID号
-
统一描述错误:错误码、错误信息 、当前URL
-
使用token令牌来授权和验证身份
-
版本控制
-
测试与环境分开:api.xxx.com/dev.api.xxx.com
-
url 语义要明确,最好可以望文生义,最好是有一份比较标准的文档
*/
class BaseException extends Exception
{
public $code=500;
public $msg =“500 内部错误 !”;
public $errorCode;/**
- BaseException constructor.
- @param array KaTeX parse error: Expected group after '_' at position 27: …ublic function _̲_construct(params = [])
{
if (!is_array($params)) {
return false;
} else {
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’];
}
}
}
}
-------------------------------------------------------------------------
用法
/**
- Created by PhpStorm.
- User: admin
- Date: 2018/9/24
- Time: 12:19
*/
namespace app\exception;
class ParameterException extends BaseException
{
public $code = ‘400’;
public $msg= “内部错误”;
public $errorCode = ‘10000’;
}
--------------------------------------------------------------------------------------------
测试
<?php
namespace app\admin\controller;
use app\admin\validate\TestValidate;
use app\exception\TestException;
use think\Exception;
class Index
{
public function index( )
{
if ( true){
throw newParameterException();
}
return json(['code'=>200],'200');
}
}