↑↑↑点击上方蓝字,关注编程秘籍
作者 | 理博文
来源 | 编程秘籍
转载联系授权 | 编程秘籍
内容
1、在 config 目录下生成一个存放错误信息的配置文件 message.php
<?php return [ 'code' => [ 'SUCCESS' => 200, //1*** 1开头的为系统相关的错误 'ERROR' => 1001, //2*** 2开头的为参数相关的错误 'PARAM_ERROR' => 2001, ], 'info' => [ 200 => '操作成功', 1001 => '操作失败', 2001 => '参数不完整', ]];
2、在应用目录下创建一个behavior目录,在里面创建MessageBehavior.php 的钩子文件
<?php namespace app\behavior; use Config; class MessageBehavior{ public function run() { $codes = Config::get('message.code'); foreach ($codes as $key => $value) { define($key,$value); } }}
3、把该钩子加入到应用初始化中(application/tags.php)
<?php // +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: liu21st // +----------------------------------------------------------------------// 应用行为扩展定义文件return [ // 应用初始化 'app_init' => [ \app\behavior\MessageBehavior::class ], // 应用开始 'app_begin' => [], // 模块初始化 'module_init' => [], // 操作开始执行 'action_begin' => [], // 视图内容过滤 'view_filter' => [], // 日志写入 'log_write' => [], // 应用结束 'app_end' => [],];
4、在 common.php 文件中写方法,一个是规定返回格式,一个是获取状态码信息
/** * 页面json 输出 */if (!function_exists('resJson')) { function resJson($code, $msg = null, $data = null){ if ($msg === null) { // 默认填充标准错误信息 $msg = getMessage($code); } else if (!is_string($msg)) { // 将msg改为data用,msg为充标准错误信息 $data = $msg; $msg = getMessage($code); } return json([ "code" => (int)$code, "msg" => $msg, "data" => $data, ]); }}/** * 获取错误信息 */if (!function_exists('getMessage')) { function getMessage($code){ $info = config('message.info'); return (array_key_exists($code, $info) ? $info[$code] : '未知错误'); }}
代码中调用示例:
<?php namespace app\index\controller;use app\index\logic\AdminLogic;class IndexController{ public function index() { $admin = new AdminLogic(); $res = $admin->selectAdmin(); return resJson(SUCCESS, $res); }}
PS:错误码常量是在初始化应用时定义的,所以IDE如果有自动提示的话会报未定义错误,手动的在项目根目录下创建 IDETrack.php 文件,写入常量定义,以便IDE代码的追踪提示。
<?php // IDE 代码追踪自动提示(没有其它用处,仅仅为了实现自动提示功能)define('SUCCESS', 200);//1*** 1开头的为系统相关的错误define('ERROR', 1001);//2*** 2开头的为参数相关的错误define('PARAM_ERROR', 2001);