构建thinkphp5全局异常

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');
}

}

猜你喜欢

转载自blog.csdn.net/qq_33113113/article/details/83046578