[PHP] laravel的异常处理
laravel默认的异常处理是展示出异常的界面,不能够完善的捕获异常并响应为json格式数据
需要修改下以下文件
app/Exceptions/Handler.php
<?php namespace App\Exceptions; use App\Lib\ApiHelper\ApiCode; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Support\Arr; use Illuminate\Validation\ValidationException; use Symfony\Component\HttpKernel\Exception\HttpException; use Throwable; class Handler extends ExceptionHandler { /** * A list of the exception types that are not reported. * * @var array */ protected $dontReport = [ // ]; /** * A list of the inputs that are never flashed for validation exceptions. * * @var array */ protected $dontFlash = [ 'current_password', 'password', 'password_confirmation', ]; /** * Register the exception handling callbacks for the application. * * @return void */ public function register() { $this->reportable(function (Throwable $e) { // }); } public function render($request, Throwable $e) { switch ($e) { case $e instanceof ValidationException: $response = [ 'errmsg' => Arr::first($e->errors())[0] ?? '请求参数不合法', 'errcode' => ApiCode::FAILED, 'data' => new \stdClass() ]; break; case $e instanceof HttpException: $response = [ 'errmsg' => ApiCode::getMessage(ApiCode::FAILED_HTTP), 'errcode' => ApiCode::FAILED_HTTP, 'data' => new \stdClass() ]; break; default: $code = $e->getCode() ?: ApiCode::FAILED; $response = [ 'errmsg' => $e->getMessage() ?: ApiCode::getMessage($code), 'errcode' => $code, 'data' => new \stdClass() ]; } if (config('app.debug')) { $response['exception'] = get_class($e); $response['message'] = $e->getMessage(); $response['trace'] = $e->getTrace(); } return response()->json($response,200,[],JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE); } }
ApiCode类
app/Lib/ApiHelper/ApiCode.php
<?php namespace App\Lib\ApiHelper; class ApiCode { const OK = 20000; const FAILED_PARAMES = 40001; const FAILED = 50000; const FAILED_NO_EXIST = 50001; const FAILED_AUTH_EXPIRED = 50002; const FAILED_HTTP = 50003; public static $messageMapper = [ self::OK => '成功', self::FAILED => '失败', self::FAILED_HTTP => 'HTTP请求异常', self::FAILED_NO_EXIST => '授权码不存在', self::FAILED_AUTH_EXPIRED => '授权码过期' ]; /** * Get code message * @param $code * @return string */ public static function getMessage($code) { return self::$messageMapper[$code] ?? '服务器未知错误'; } }
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2020-09-04 [Go]GO语言实战-gorm获取insert的自增id 和 struct标签不映射到表字段
2018-09-04 [PHP] 数据结构-单链表头插法PHP实现
2018-09-04 [PHP] 数据结构-从尾到头打印链表PHP实现
2018-09-04 [PHP] 数据结构-输出链表倒数第k个结点PHP实现