ThinkPHP 通用的API格式封装

news2024/11/27 10:40:57

ThinkPHP 通用的API格式封装

  • 1.创建status.php 用于设置通用的状态码返回枚举类
  • 2.将API返回格式统一封装
  • 3.重写BaseController中的__call方法
  • 4.在控制器下面新建Error控制器,然后添加__call方法

1.创建status.php 用于设置通用的状态码返回枚举类

<?php

return[
    "success"=>1,
    "error"=>0,
    "controller_not_found"=>-1,
    "action_not_found"=>-2,
];

2.将API返回格式统一封装

<?php

/**API 统一格式化
 * @param $status
 * @param $message
 * @param $data
 * @param $httpStatus
 * @return \think\response\Json
 */
function show($status,$message,$data=[],$httpStatus=200){

    $result = [
      "status"=>$status,
      "message"=>$message,
      "data"=>$data,
    ];

    return json($result,$httpStatus);
}

3.重写BaseController中的__call方法

在BaseController中重写__call方法,当调用不存在的方法时,就会调用__call方法,会传入请求方法和参数

<?php
declare (strict_types = 1);

namespace app;

use think\App;
use think\exception\ValidateException;
use think\Validate;


/**
 * 控制器基础类
 */
abstract class BaseController
{
    /**
     * Request实例
     * @var \think\Request
     */
    protected $request;

    /**
     * 应用实例
     * @var \think\App
     */
    protected $app;

    /**
     * 是否批量验证
     * @var bool
     */
    protected $batchValidate = false;

    /**
     * 控制器中间件
     * @var array
     */
    protected $middleware = [];

    /**
     * 构造方法
     * @access public
     * @param  App  $app  应用对象
     */
    public function __construct(App $app)
    {
        $this->app     = $app;
        $this->request = $this->app->request;

        // 控制器初始化
        $this->initialize();
    }

    // 初始化
    protected function initialize()
    {}

    /**
     * 验证数据
     * @access protected
     * @param  array        $data     数据
     * @param  string|array $validate 验证器名或者验证规则数组
     * @param  array        $message  提示信息
     * @param  bool         $batch    是否批量验证
     * @return array|string|true
     * @throws ValidateException
     */
    protected function validate(array $data, string|array $validate, array $message = [], bool $batch = false)
    {
        if (is_array($validate)) {
            $v = new Validate();
            $v->rule($validate);
        } else {
            if (strpos($validate, '.')) {
                // 支持场景
                [$validate, $scene] = explode('.', $validate);
            }
            $class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
            $v     = new $class();
            if (!empty($scene)) {
                $v->scene($scene);
            }
        }

        $v->message($message);

        // 是否批量验证
        if ($batch || $this->batchValidate) {
            $v->batch(true);
        }

        return $v->failException(true)->check($data);
    }

	// 重写__call部分
    public function __call(string $name, array $arguments)
    {
        // TODO: Implement __call() method.
        return show(config("status.action_not_found"),"找不到{$name}方法",null,404);
    }
}

在这里插入图片描述

4.在控制器下面新建Error控制器,然后添加__call方法

在控制器下面新建Error控制器,然后添加__call方法,这样就会调用不存在的控制器的时候会调用__call方法,会传入请求的控制器名称和参数

<?php
namespace app\index\controller;

class Error{

    public function __call(string $name, array $arguments)
    {
        // TODO: Implement __call() method.
        return show(config("status.controller_not_found"),"找不到{$name}控制器",null,404);
    }
}

测试

在这里插入图片描述

在这里插入图片描述

假定一个成功的请求,测试一下

public function jsonTest(){
    $data = ['name' => 'thinkphp', 'status' => '1'];
    return show(config("status.success"),"请求成功",$data);
}

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/940551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Agent]开发---ConversationalRetrievalAgent开发

参考资料[langchain官方文档]&#xff1a; tool retrieval agent::::https://python.langchain.com/docs/modules/agents/how_to/custom_agent_with_tool_retrieval retrieval memory:::https://python.langchain.com/docs/modules/memory/types/vectorstore_retriever_memory …

科技巨擘:探索中国机器人产业的腾飞之路

原创 | 文 BFT机器人 引言 今年4月&#xff0c;特斯拉宣布在德州建造全球最大的电池工厂&#xff0c;这一举措进一步实现了马斯克对于“机器制造机器”的大目标。这座工厂不像过去依靠传统的工人模式&#xff0c;而是采用大量机器人完成生产任务。 机器人已成「刚需」。 机器人…

Mybatis小记

目录 Mybatis第一个程序 xml文件 测试类 错误排查 Mybatis第一个程序 1.搭建实验数据库 2.导入MyBatis相关jar包 3.编写MyBatis核心配置文件 4.编写MyBatis工具类 5.创建实体类、 6.编写Mapper接口类 7.编写Mapper.xml配置文件 8.编写测试类 对象传参只引用需要的属性就可…

突破连接壁垒,火山引擎边缘云网络的先行之路

在万物互联时代&#xff0c;信息不局限于人与人之间的交流&#xff0c;大量的机器设备也需要进行信息交流。就在去年&#xff0c;我国率先迎来了“物超人”的历史性时刻&#xff0c;即物联网连接数超越了人联网连接数。边缘云的发展进入到“黄金十年”。 “要致富&#xff0c;…

多线程(一)

一.什么是线程 一个线程就是一个执行流&#xff0c;多个线程就是多个执行流&#xff0c;多线程就是让多个执行流分别执行自己的代码。 比如&#xff1a;利用多线程在控制台上循环交替打印A和B package demo; public class Main {static class SubThread extends Thread{Over…

Webgl利用缓冲区绘制三角形

什么是attribute 变量 它是一种存储限定符&#xff0c;表示定义一个attribute的全局变量&#xff0c;这种变量的数据将由外部向顶点着色器内传输&#xff0c;并保存顶点相关的数据&#xff0c;只有顶点着色器才能使用它 <!DOCTYPE html> <html lang"en"&g…

Blender界面学习02

学习视频 【基础篇】1.3 认识界面_哔哩哔哩_bilibili 基本的3d建模的流程是什么&#xff1f; 四个角现出加号时可以拆分窗口&#xff0c;也可以合并窗口 向自己的方向拉是合并&#xff0c;向不是自己的方向拉是合并 如果界面搞乱后需要回到原来的布局 然后在新建的布局上右击 …

CSRF漏洞场景复现

文章目录 CSRF漏洞是什么&#xff1f;场景复现get方式攻击post方式攻击 原理分析 CSRF漏洞是什么&#xff1f; 跨站请求伪造(Cross Site Request Forgery&#xff0c;CSRF)是一种攻击&#xff0c;它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作…

手把手教你用R优雅地绘制研究区地图

用R语言绘制研究区图和地图 引言 在地理信息系统和数据可视化领域&#xff0c;绘制研究区图和地图是非常重要的任务。R语言是一种功能强大的统计分析和可视化工具&#xff0c;也可以用于绘制各种类型的地图。本文将介绍如何使用R语言绘制研究区图和地图。 准备工作 在使用R语…

skywalking agent监控java服务

一、前言 skywalking agent可以监控的服务类型有多种&#xff0c;python、go、java、nodejs服务等都可以监控&#xff0c;现在通过java服务来演示skywalking agent的使用&#xff0c;并且是使用容器的方式实现 二、部署skywalking agent监控 需要注意&#xff0c;skywalking…

高忆管理:什么叫满仓?

满仓是股市术语之一&#xff0c;指出资者将所有资金用于股票出资&#xff0c;即持有的股票数量到达最大值。满仓出资是一种高风险高回报的出资战略&#xff0c;存在着带来高收益的或许性&#xff0c;但也或许面对巨大的亏本风险。 从理财视点来看&#xff0c;满仓出资是不明智…

Leetcode适合新手吗?0基础怎么较短时间得到算法数据结构提升?揭秘大牛都在用的刷题工具!...

别再用leetcode无脑刷题了&#xff01; 刷题不应该量化为“刷多少道题”&#xff0c;对于刷题来说&#xff0c;永远不是追求数量的堆叠。 你想&#xff0c;LeetCode 上的题难度不等&#xff0c;有简单、中等、困难。 刷100道简单题倒是快&#xff0c;一个星期保证完事&#xff…

具有优异导电性能且抑制了准饱和效应的1200V 4H-SiC沟槽MOSFET

标题&#xff1a;1200V 4H-SiC trench MOSFET with superior figure of merit and suppressed quasi-saturation effect 摘要 本文提出一种具有部分被埋层n区包围的p屏蔽区的优异性能(FoM)1200V 4H-SiC沟槽MOSFET。在准饱和(QS)状态下&#xff0c;埋层n区抑制由p屏蔽区形成的耗…

SharedPreference

Android中的SharedPreference是轻量级的数据存储方式&#xff0c;能够保存简单的数据类型。比如String、int、boolean值等。其内部是以XML结构保存在/data/data/包名/shared_prefs文件夹下&#xff0c;数据以键值对的形式保存。是线程安全的&#xff0c;但不是进程安全的。 1.…

electron globalShortcut 快捷键,在焦点移到其他软件上时,调用快捷键报错

用 electron 开发软件&#xff0c;在设置了 globalShortcut 快捷键后&#xff0c;在当前开发的软件上调用快捷键正常&#xff0c;但是当焦点不在当前软件时&#xff0c;在使用快捷键&#xff0c;好些时候会报错。大概率与系统快捷键产生冲突或者快键键控制的回调里获取的内容&a…

全新UI站长在线工具箱系统源码带后台开源版

该系统的全开源版本可供下载&#xff0c;并且支持暗黑模式。 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API&#xff0c;同时还自带免费API接口&#xff0c; 是一个多功能性工具程序&#xff0c;支持后台管理、上传插件、添加增减删功能。 环…

行业追踪,2023-08-28

自动复盘 2023-08-28 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

LNMT与动静分离

目录 前言 一、简要思路 二、NGINX的配置参考 1、location 2、rewirte 三、动静分离配置&#xff08;单机配置&#xff09; 1、Tomcat配置 2、配置NGINX 3、安装mariadb 4、测试 Tomcat8080​编辑 Tomcat8081 访问不存在的页面 前言 LNMT&#xff08;Linux Nginx MySQL Tom…

什么是网络取证(Network Forensics)

企业采用新技术来检查其网络安全是否存在零日漏洞&#xff0c;与立即指示问题的物理层不同&#xff0c;黑客攻击尝试可能会被忽视并变得严重&#xff0c;直到对网络流量有一个整体的可见性。通过实时监控来跟踪其源和目标的流量&#xff0c;以查明问题或潜在问题的根源。 什么…

CY3-DBCO活性荧光染料-星戈瑞

​欢迎来到星戈瑞荧光stargraydye&#xff01;小编带您盘点&#xff1a; CY3-DBCO是一种活性荧光染料&#xff0c;它是由Cyanine3&#xff08;CY3&#xff09;荧光染料与DBCO&#xff08;dibenzocyclooctyne&#xff09;官能团共轭而成的化合物。 活性荧光染料通常是指具有特定…