yii2 开发api接口时优雅的处理全局异常的方法
(编辑:jimmy 日期: 2025/11/13 浏览:3 次 )
前言:个人觉得,学习或温习一套Web框架,在快速阅读一遍文档后,应从路由,控制器,请求/响应对象,数据模型(Logic,Dao,Entity),全局异常处理几个方面下手,这几项了解后,框架上手就游刃有余了。然后我比较喜欢在开工前整理好框架的全局异常处理,方便写 api时错误的统一响应。
在api接口的开发过程中,我们需要对用户数据进行严格的校验,防止非法输入对服务产生安全问题,在开发过程中,我比较喜欢即时的以抛出异常的方式中断请求的处理,并以全局异常处理器格式化处理后统一返回给客户端。
今天就把 yii2 自带的全局异常处理器改写至对 api 友好(yii2的 yii\web\HttpException默认对 web 请求友好,都是以text/html的方式返回错误描述,对api不友好,api当然是json)。
注册异常处理器
yii2也是以 controller/action 的方式定义一个异常处理器的,我们可以在 components=>errorHandler中自定义。
# config/web.php
'components' => [
'errorHandler' => [
'errorAction' => 'exception/handler'
]
]
异常处理器
定义相应的异常处理器,app\actions\ErrorApiAction 继承 yii\web\ErrorAction,可以拿到yii2为我们整理好的全局异常。
# controllers/ExceptionController.php <"htmlcode">#actions/ErrorApiAction.php <"color: #ff0000">异常实体主要是简单的把状态码的传递封装一下,用更容易理解的类名来代理传递。
exceptions/HttpException.php<"htmlcode"><"htmlcode"><"htmlcode">上一篇:php获取目录下所有文件及目录(多种方法)(推荐)<"htmlcode"><"color: #ff0000">使用范例在一些
service logic model中根据需要即时抛出异常即可,上层控制器拿到的永远都是正常的返回数据,绝对的2xx响应簇throw new HttpBadRequestException("具体的非法描述", 4001); throw new HttpUnauthorizedException("请认证后访问"); throw new HttpForbiddenException("无权访问"); throw new HttpNotFoundException("请求资源不存在");以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇:yii2的restful api路由实例详解
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。
