• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > Thinkphp5中是如何自定义全局异常

Thinkphp5中是如何自定义全局异常

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了Thinkphp5异常,Thinkphp自定义全局异常等相关知识,希望对您有所帮助

下面给大家讲解thinkphp5中是如何自定义全局异常,希望对需要的朋友有所帮助!

为了针对书写 api 时,对各种错误返回不通的 json ,直接使用 TP5 自带的提示错误页面,对于客户端而言,明显没有任何的作用,所以需要自己来自定义全局异常。


1、创建一个全局异常的类(用于传错误信息,状态码等)

use think\Exception;class BaseException extends Exception {    /** HTTP 状态码     * @var string     */    public $code;         /** 自定义错误码     * @var string     */    public $errorCode;         /** 错误信息     * @var string     */    public $msg;         public function __construct($params=[])    {        if (! $params) {            return ;        }                 // 如果传了 code        if ($array_key_exists('code', $code) {            $this->code = $code;        }                 // 如果传了 errorCode        if (array_key_exists('errorCode', $params)) {            $this->errorCode = $params['errorCode'];        }        // 如果传了 msg        if (array_key_exists('msg', $params)) {            $this->msg = $params['msg'];        }    }}

这样就可以给以传不通的状态码,错误信息和自定义错误码。


2、创建一个错误处理类

错误处理类,继承于TP5自带的错误处理类,重写该 render 方法,就可以自定义错误。

use Exception;use think\exception\Handle;use think\Request;class ExceptionHandle extends Handle {    /** 状态码     * @var     */    private $code;    /** 自定义错误码     * @var     */    private $errorCode;    /** 错误信息     * @var     */    private $msg;         /** 重写 Handle 方法里的Render     * @param Exception $e     * @return \think\response\Json     */            // 注意这里是基类 Exception    public function render(Exception $e)     {        if ($e instanceof BaseException) {            //如果是自定义异常,则控制http状态码,不需要记录日志            //因为这些通常是因为客户端传递参数错误或者是用户请求造成的异常            //不应当记录日志            $this->msg = $e->msg;            $this->code = $e->code;            $this->errorCode = $e->errorCode;        } else {            // 如果是服务器未处理的异常,将http状态码设置为500,并记录日志            if (config('app_debug')) {                // 调试状态下需要显示TP默认的异常页面,因为TP的默认页面                // 很容易看出问题                return parent::render($e);            }            $this->code = 500;            $this->msg = '服务器内部错误,不想告诉你';            $this->errorCode = 999;            $this->recordErrorLog($e);        }        $request = Request::instance();        $result = [            'msg' => $this->msg,            'errorCode' => $this->errorCode,            'request_url' => $request->url()        ];        return json($result, $this->code);    }         /** 错误日志处理     *  这里把config里日志配置的type改为test     * @param Exception $e     */    private function recordErrorLog(Exception $e)    {        // 开启日志        Log::init([            'type'  =>  'File',            'path'  =>  LOG_PATH,            'level' => ['error']        ]);                 // 日志记录方法        Log::record($e->getMessage(),'error');    }     }



3、修改配置config

// 异常处理handle类 留空使用 \think\exception\Handle'exception_handle' => 'app\lib\exception\ExceptionHandle',     // 关闭日志    'log' => [    // 日志记录方式,内置 file socket 支持扩展    // 关闭自动记录日志,请将type设置为test    'type'  => 'test',    // 日志保存目录    'path'  => __DIR__.'/../log/',    // 日志记录级别    'level' => ['sql'],],


4、使用错误类的方法

// 这里随便创建一个userControlelrclass UserController extends Controller {    use app\api\model\User;         /**    * 根据 id 获取某个用户    */    public function getUser($id)    {        $user = User::get($id);                 // 如果 $user 为空 抛出自定义的错误,下面有...        if(! $user) {            throw UserMissException();        }                 return json($user);    }}

自定义的错误子类

// 上面第一节,写的 Base 错误类派上用场了。 class UserMissException extends BaseException{    /** HTTP 状态码     * @var string     */    public $code = '404';    /** 自定义错误码     * @var string     */    public $errorCode = '40000';    /** 错误信息     * @var string     */    public $msg = '请求的用户不存在';}

请求这个 getUser 方法,报错~ 就会显示

{    "msg": "请求的用户不存在",    "errorCode": "40000",    "request_url": "/api/v1/user/10"}

其他的错误类型,也就可以继续创建异常子类,定义这些错误属性。


5、总结

不光是在TP5的框架,包括laravel框架,也是可以自己重新写异常类Exception的render方法,来达到自己想要的错误返回数据或者是页面模版。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Thinkphp5中是如何自定义全局异常

相关文章

  • 2022-04-29一个设计师的PS经验技巧及设计心得
  • 2022-04-29dedecms大量删除文章后,列表页显示错误修复办法
  • 2022-04-29Illustrator制作蓝色苹果QuickTime标志
  • 2022-04-29html5的drag和drop的用法示例
  • 2022-04-29PhotoShop制作漂亮的蓝色发光文字效果教程
  • 2022-04-29PHPCMS邮箱不能发送邮件?
  • 2022-04-29WordPress网站优化方法
  • 2022-04-29Photoshop制作精美的圆形仪表指针图标
  • 2022-04-29实现从Redis中订阅消息转发到 WebSocket 客户端
  • 2022-04-29Photoshop结合C4D制作三维立体艺术字

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 影响SEO效果四大因素:服务器稳定性居首
    • Seo职场新人要怎样才能把seo做好呢
    • PhotoShop打造可爱的糖果文字特效制作教程
    • Laravel 图片上传失败怎么办
    • Photoshop打造漂亮的钻石艺术字体排字教程
    • 帝国CMS后台添加关键字时自动复制到TAGS(同步更新)的方法
    • Photoshop制作可爱的卡通剪纸字
    • 详解通过WordPress内置函数批量添加文章的方法
    • Photoshop多边形套索工具无法闭合BUG(单击,双击,Esc,回车)均无效的解决办法
    • PhotoShop+coreldRAW打造喜迎国庆节海报制作教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有