《thinkphp》一、通用化api和异常解决方案

一、通用化API接口数据封装

  • 1、将下面代码放到common.php公共文件中,方便调用
	/**
	 * 通用化API接口数据输出
	 * @param int $status 业务状态码
	 * @param string $message 信息提示
	 * @param [] $data  数据
	 * @param int $httpCode http状态码
	 * @return array
	 */
	function show($status, $message, $data=[], $httpCode=200) {
	    $data = [
	        'status' => $status,
	        'message' => $message,
	        'data' => $data,
	    ];
	    return json($data, $httpCode);
	}
  • 2、使用
	return show(1, 'OK', $data, 200);

二、不可预知的内部异常api数据输出解决方案

在这里插入图片描述

  • 1、自定义ApiException继承Exception
<?php
namespace app\common\lib\exception;
use think\Exception;

class ApiException extends Exception {

    public $message = '';
    public $httpCode = 500;
    public $code = 0;
    /**
     * @param string $message
     * @param int $httpCode
     * @param int $code
     */
    public function __construct($message = '', $httpCode = 0, $code = 0) {
        $this->httpCode = $httpCode;
        $this->message = $message;
        $this->code = $code;
    }
}
  • 2、自定义ApiHandleException继承Handle处理异常
<?php
namespace app\common\lib\exception;
use think\exception\Handle;

class ApiHandleException extends Handle {
    /**
     * http 状态码
     * @var int
     */
    public $httpCode = 500;

    public function render(\Exception $e) {

        if(config('app_debug') == true) {  // 调试情况下显示自带的异常渲染
            return parent::render($e);
        }
        if ($e instanceof ApiException) { // 自定义的异常类
            $this->httpCode = $e->httpCode;
        }
        // 结合前面的通用化API接口数据封装返回给前端
        return show(0, $e->getMessage(), [], $this->httpCode);
    }
}
  • 3、替换系统自带的Hanlder处理异常类
    找到config.php 配置类,指向自己的ApiHandleException处理类
// 异常处理handle类 留空使用 \think\exception\Handle
'exception_handle'   =>  '\app\common\lib\exception\ApiHandleException',
  • 4、使用。抛出自定义异常
throw new ApiException('授权码sign失败', 401);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章