zoukankan      html  css  js  c++  java
  • [PHP] laravel的异常处理

    laravel默认的异常处理是展示出异常的界面,不能够完善的捕获异常并响应为json格式数据

    需要修改下以下文件

    app/Exceptions/Handler.php

    <?php
    
    namespace AppExceptions;
    
    use AppLibApiHelperApiCode;
    use IlluminateFoundationExceptionsHandler as ExceptionHandler;
    use IlluminateSupportArr;
    use IlluminateValidationValidationException;
    use SymfonyComponentHttpKernelExceptionHttpException;
    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 AppLibApiHelper;
    
    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] ?? '服务器未知错误';
        }
    }

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com
  • 相关阅读:
    SQL中的cast和convert用法示例
    SpendidCRM:在adminlayout中修改了视图上的字段后,用MyGeneration生成修改脚本
    [转]ASP.NET数据绑定方法
    商城 5051课 纪要
    .net判断用户是否已登录
    Jquery 监视按键,按下回车键触发某方法
    Sharepoint中三个强力的工具(WPManager, OSSEventManager, FriendlyQuery),另增清除已删除用户
    错误处理:此网页不允许使用基本类型"System.Web.UI.MasterPage”该类型未注册为安全类型
    MOSS页面显示“根级别上的数据无效”
    读取/设置超链接或图片类型栏的值
  • 原文地址:https://www.cnblogs.com/taoshihan/p/15226019.html
Copyright © 2011-2022 走看看