tp5自定义异常类

作者: xahy 分类: 笔记 发布时间: 2019-07-29 14:34

值得一提的是,

tp5框架的配置是非常的人性化的。

├─application         应用目录
├─config              配置目录
│  ├─config.php       应用配置文件
│  ├─database.php     数据库配置文件
│  ├─route.php        路由配置文件
│  ├─extra            应用扩展配置目录
│  ├─index            index模块配置文件目录
│  │  ├─extra         index模块扩展配置目录
│  │  ├─config.php    index模块配置文件
│  │  └─database.php  index模块数据库配置文件

 

如果需要给独立的业务目录增加独有的配置,

只需要在  config 目录下创建对应的模块名配置目录即可。

ps:这里的config目录是指定义的独立配置目录。

 

回到主题上,

自定义异常类。

  • 首先在配置文件声明使用的异常类
<?php

/***
 * config/api/config.php
 * api业务相关配置
 */
return [
    /// 默认输出类型
    'default_return_type'    => 'json',
    /// 默认AJAX 数据返回格式,可选json xml ...
    'default_ajax_return'    => 'json',
    /// 异常处理handle类 留空使用 \think\exception\Handle
    'exception_handle'       => 'app\common\exception\ApiHandleException',
];
  • ApiHandleException 内容:
<?php
namespace app\common\exception;

use think\exception\Handle;

/***
 * 自定义api异常输出类
 * Class ApiHandleException
 * @package app\common\exception
 */
class ApiHandleException extends  Handle {

    ///http 状态码
    public $httpCode = 500;


    /***
     * 输出异常
     * @param \Exception $e
     * @return array
     */
    public function render(\Exception $e) {
        /// 调整状态码
        if ($e instanceof ApiException) {
            $this->httpCode = $e->httpCode;
        }

        /// 开启debug则输出详细异常信息
        if(config('app_debug') == true) {
            return  api_echo(0, $e->getMessage(), [], $this->httpCode);
        }

        ///默认只显示服务器错误通过日志排查
        trace([
            '导致异常的文件'=>$e->getFile(),
            '导致异常所在行'=>$e->getLine(),
            '异常额外 Debug 数据'=>$e->getData(),
            '异常提示信息'=>$e->getMessage(),
        ],'error');
        return  api_echo(0, '服务器错误', [], $this->httpCode);
    }
}
  • ApiHandleException 调用的 ApiException
<?php
namespace app\common\exception;

use think\Exception;

/***
 * 自定义api异常类
 * Class ApiException
 * @package app\common\exception
 */
class ApiException extends Exception {

    ///错误信息
    public $message = '';
    /// http状态码
    public $httpCode = 500;
    ///业务状态码
    public $status = 0;


    public function __construct($message = '', $httpCode = 0, $status = 0) {
        $this->message = $message;
        $this->httpCode = $httpCode;
        $this->status = $status;
    }
}
  • ApiHandleException 调用的 api_echo
/***
 * API返回数据公共方法
 * @param $status 业务状态码
 * @param $message 提示信息
 * @param array $data 返回的数据
 * @param int $httpCode httpCode
 * @return \think\response\Json
 */
function api_echo($status, $message, $data=[], $httpCode=200) {

    $data = [
        'status' => $status,
        'message' => $message,
        'data' => $data,
    ];

    return json($data, $httpCode);
}

 

总的来说,

可以利用框架对模块配置文件的支持,

来达到 api 业务调用 api 相关的异常类,

后台业务调用后台相关的异常类。

 

参考资料:

  • https://www.kancloud.cn/manual/thinkphp5/215848
  • tp5 默认配置文件 config.php

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注