IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ResultCode自定义结果码 -> 正文阅读

[JavaScript知识库]ResultCode自定义结果码

ResultCode和HTTP定义的status_code (状态码)不同,ResultCode表示的是后端控制器处理后返回给前端结果码

Exception.php

<?php

namespace app\exception;

class Exception extends \Exception
{
    public function __construct($message, $code = -1, \Exception $previous = null)
    {
        parent::__construct($message, $code, $previous);
    }
}

Enum.php

<?php

namespace app\enums;

use app\exception\Exception;

class Enum
{
    private static function getConstants()
    {
        $class = new \ReflectionClass(get_called_class());
        return $class->getConstants();
    }
    
    public static function isValidKey($key)
    {
        $constants = self::getConstants();
        return array_key_exists($key, $constants);
    }
    
    public static function isValidValue($value)
    {
        $constants = array_values(self::getConstants());
        return in_array($value, $constants);
    }
    
    public static function getValue($key)
    {
        $class = get_called_class();
        if(self::isValidKey($key)){
            $value = @eval('return $class::' . $key . ';');
            return $value;
        }else{
            $message = "Undefined constant `{$key}` in class " . $class;
            throw new Exception($message);
        }
    }
    
    public static function getKey($value)
    {
        $class = get_called_class();
        $constants = self::getConstants();
        $key = array_search($value,$constants);
        if($key){
            return $key;
        }else{
            $message = "Undefined value `{$value}` in class " . $class;
            throw new Exception($message);
        }
    }
    
}

ResultCode.php

//结果码
class ResultCode extends Enum
{
    const SUCCESS = 1;
    //参数错误
    const PARAMS_ERROR = 10000;//参数错误(大类)
    const PARAMS_IS_INVALID = 10001;//参数无效
    const PARAMS_NOT_COMPLETE = 10002;//参数不全

    //数据错误
    const DATA_ERROR = 20000;//数据错误(大类)
    const DATA_NOT_FOUND = 20001;//数据没找到
    const DATA_ALREADY_EXISTED = 20002;//数据已存在
    const DATA_IS_WRONG = 20003;//数据有错误
    
    //业务错误
    const BUSINESS_ERROR = 30000;//业务错误(大类)
	
	//更多......
    
}

尽可能使用5位以上数字方便后面扩展

如果不想分得太细,直接使用大类的结果码亦可

Result.php

<?php 

namespace app\web;

use Yii;
use app\enums\ResultCode;

class Result
{
    public $code;
    public $message;
    public $data;
    
    public function __construct($code = '', $message = '', $data = null)
    {
        $this->code = $code;
        $this->message = $message;
        $this->data = $data;
    }
}

SuccessResult.php

<?php 

namespace app\web;

use Yii;
use app\enums\ResultCode;

class SuccessResult extends Result
{
    public function __construct($data = null)
    {
        parent::__construct(ResultCode::SUCCESS,'',$data);
    }
}

FailResult.php

<?php 

namespace app\web;

use Yii;
use app\enums\ResultCode;

class FailResult extends Result
{
    public function __construct($code,$data = null)
    {
        $message = ResultCode::getKey($code);
        parent::__construct($code,$message,$data);
    }
}

ResponseResult.php

<?php 

namespace app\web;

use Yii;
//响应结果
class ResponseResult
{
    public static function send($result)
    {
        $response = Yii::$app->response;
        $response->data = $result;
        $response->send();
    }
    
    public static function success($data = null)
    {
        $result = new SuccessResult($data);
        self::send($result);
    }
    
    public static function fail($code,$data = null)
    {
        $result = new FailResult($code,$data);
        self::send($result);
    }
}

用法

ResponseResult::success();
ResponseResult::fail(ResultCode::PARAMS_ERROR);
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:02:04  更:2022-03-17 22:04:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:39:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码