当前位置: 首页 > news >正文

ThinkPHP 通用的API格式封装实例代码

ThinkPHP 通用的API格式封装

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

1

2

3

4

5

6

7

<?php

return[

"success"=>1,

"error"=>0,

"controller_not_found"=>-1,

"action_not_found"=>-2,

];

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<?php

/**API 统一格式化

* @param $status

* @param $message

* @param $data

* @param $httpStatus

* @return \think\response\Json

*/

functionshow($status,$message,$data=[],$httpStatus=200){

$result= [

"status"=>$status,

"message"=>$message,

"data"=>$data,

];

returnjson($result,$httpStatus);

}

3.重写BaseController中的__call方法

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

<?php

declare(strict_types = 1);

namespaceapp;

usethink\App;

usethink\exception\ValidateException;

usethink\Validate;

/**

* 控制器基础类

*/

abstractclassBaseController

{

/**

* 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 应用对象

*/

publicfunction__construct(App$app)

{

$this->app =$app;

$this->request =$this->app->request;

// 控制器初始化

$this->initialize();

}

// 初始化

protectedfunctioninitialize()

{}

/**

* 验证数据

* @access protected

* @param array $data 数据

* @param string|array $validate 验证器名或者验证规则数组

* @param array $message 提示信息

* @param bool $batch 是否批量验证

* @return array|string|true

* @throws ValidateException

*/

protectedfunctionvalidate(array$data, string|array$validate,array$message= [], bool$batch= false)

{

if(is_array($validate)) {

$v=newValidate();

$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部分

publicfunction__call(string$name,array$arguments)

{

// TODO: Implement __call() method.

returnshow(config("status.action_not_found"),"找不到{$name}方法",null,404);

}

}

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

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

1

2

3

4

5

6

7

8

9

<?php

namespaceapp\index\controller;

classError{

publicfunction__call(string$name,array$arguments)

{

// TODO: Implement __call() method.

returnshow(config("status.controller_not_found"),"找不到{$name}控制器",null,404);

}

}

测试

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

1

2

3

4

publicfunctionjsonTest(){

$data= ['name'=>'thinkphp','status'=>'1'];

returnshow(config("status.success"),"请求成功",$data);

}

到此这篇关于ThinkPHP 通用的API格式封装的文章就介绍到这了

http://www.jsqmd.com/news/686526/

相关文章:

  • Skills 实战:Unsplash → COS 自动化配图
  • 终极指南:使用SMUDebugTool解锁AMD Ryzen处理器的隐藏性能
  • 当选择深圳小程序开发案例时,如何才能找到本凡码农的最佳解决方案?
  • 106、groupby函数(汇总数据)
  • 2026中央空调清洗选型指南:苏州上海中央空调清洗哪家便宜价格多少解析 - 速递信息
  • 2026年超全攻略!探秘青藏线绝美旅游线路,你准备好了吗? - 红客云(官方)
  • JSON Lines处理与GPU加速:cuDF百倍性能提升实战
  • AMD锐龙终极调优指南:用SMUDebugTool释放处理器全部潜能
  • 要懂 transformer 大模型(如 LLM)的基本构造 +关键组件(Attention, FFN, embedding 等)
  • Phi-mini-MoE-instruct效果实测:4096 tokens内跨文件函数调用关系理解
  • Matlab Model Reference实战避坑:从团队协同到放弃,我的踩坑全记录
  • 闲置盒马鲜生礼品卡的最佳处理方法,一键轻松回收! - 团团收购物卡回收
  • QtScrcpy深度解析:突破Android设备管理与批量控制的技术方案
  • real-anime-z镜像性能压测:并发5用户下平均响应时间与OOM阈值分析
  • 电视广告片该如何制作?有哪些具体步骤和要点? - 红客云(官方)
  • 3个理由告诉你为什么AirPodsDesktop是Windows/Linux用户的必备神器!
  • 告别手动输密码!Ubuntu 20.04 LTS全盘加密后实现开机自动解锁的保姆级教程
  • WorkshopDL技术深度指南:跨平台Steam创意工坊下载解决方案
  • 2026年防火卷帘厂家:解读行业三大核心趋势 - 速递信息
  • 市面上质量好的EPS泡沫板公司推荐哪家好 - 品牌排行榜
  • 2.3 柯西积分公式【习题2.3-10】利用柯西积分公式证明,埃尔米特多项式生成函数
  • 从零构建AI系统:核心思路与工程实践
  • 抖音下载器完整指南:如何免费批量下载抖音视频与音乐
  • WinBtrfs:Windows原生读写Linux Btrfs文件系统的完整指南
  • 如何高效将B站视频转为结构化文字稿?Bili2text一站式解决方案
  • 2026年3月喷带安装推荐,滴灌/园林灌溉/智能灌溉/微喷系统/滴带/水肥一体化滴灌/榴莲智能灌溉,喷带厂家选哪家 - 品牌推荐师
  • Metal与WebGPU实战笔记:在Mac/iOS和浏览器里搞定纹理与缓冲区的‘视图’(Texture/Buffer View)
  • 外盘期货行情源接口规格展示
  • 实战指南:深入AMD Ryzen硬件调试的终极工具SMUDebugTool
  • FreeMove:如何在不破坏程序安装的情况下安全迁移Windows目录