ThinkPHP?通用的API格式封裝實(shí)例代碼
ThinkPHP 通用的API格式封裝
1.創(chuàng)建status.php 用于設(shè)置通用的狀態(tài)碼返回枚舉類
<?php
return[
"success"=>1,
"error"=>0,
"controller_not_found"=>-1,
"action_not_found"=>-2,
];2.將API返回格式統(tǒng)一封裝
<?php
/**API 統(tǒng)一格式化
* @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.重寫B(tài)aseController中的__call方法
在BaseController中重寫__call方法,當(dāng)調(diào)用不存在的方法時(shí),就會(huì)調(diào)用__call方法,會(huì)傳入請(qǐng)求方法和參數(shù)
<?php
declare (strict_types = 1);
namespace app;
use think\App;
use think\exception\ValidateException;
use think\Validate;
/**
* 控制器基礎(chǔ)類
*/
abstract class BaseController
{
/**
* Request實(shí)例
* @var \think\Request
*/
protected $request;
/**
* 應(yīng)用實(shí)例
* @var \think\App
*/
protected $app;
/**
* 是否批量驗(yàn)證
* @var bool
*/
protected $batchValidate = false;
/**
* 控制器中間件
* @var array
*/
protected $middleware = [];
/**
* 構(gòu)造方法
* @access public
* @param App $app 應(yīng)用對(duì)象
*/
public function __construct(App $app)
{
$this->app = $app;
$this->request = $this->app->request;
// 控制器初始化
$this->initialize();
}
// 初始化
protected function initialize()
{}
/**
* 驗(yàn)證數(shù)據(jù)
* @access protected
* @param array $data 數(shù)據(jù)
* @param string|array $validate 驗(yàn)證器名或者驗(yàn)證規(guī)則數(shù)組
* @param array $message 提示信息
* @param bool $batch 是否批量驗(yàn)證
* @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, '.')) {
// 支持場(chǎng)景
[$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);
// 是否批量驗(yàn)證
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方法,這樣就會(huì)調(diào)用不存在的控制器的時(shí)候會(huì)調(diào)用__call方法,會(huì)傳入請(qǐng)求的控制器名稱和參數(shù)
<?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);
}
}測(cè)試


假定一個(gè)成功的請(qǐng)求,測(cè)試一下
public function jsonTest(){
$data = ['name' => 'thinkphp', 'status' => '1'];
return show(config("status.success"),"請(qǐng)求成功",$data);
}
到此這篇關(guān)于ThinkPHP 通用的API格式封裝的文章就介紹到這了,更多相關(guān)ThinkPHP API格式封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Yii中CArrayDataProvider和CActiveDataProvider區(qū)別實(shí)例分析
這篇文章主要介紹了Yii中CArrayDataProvider和CActiveDataProvider區(qū)別,結(jié)合實(shí)例形式分析了Yii中CArrayDataProvider和CActiveDataProvider的具體功能與用法,需要的朋友可以參考下2016-03-03
PHP模板引擎Smarty內(nèi)建函數(shù)foreach,foreachelse用法分析
這篇文章主要介紹了PHP模板引擎Smarty內(nèi)建函數(shù)foreach,foreachelse用法,結(jié)合實(shí)例形式分析了foreach,foreachelse的功能與具體使用技巧,需要的朋友可以參考下2016-04-04
2017年最好用的9個(gè)php開發(fā)工具推薦(超好用)
對(duì)于php初學(xué)者不知道哪個(gè)php開發(fā)工具好用,下面小編給大家分享2017年最好用的9個(gè)php開發(fā)工具推薦,感興趣的朋友一起看看吧2017-10-10
PHP實(shí)現(xiàn)隨機(jī)生成水印圖片功能
這篇文章主要為大家詳細(xì)介紹了PHP生成隨機(jī)水印圖片的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Laravel使用memcached緩存對(duì)文章增刪改查進(jìn)行優(yōu)化的方法
這篇文章主要介紹了Laravel使用memcached緩存對(duì)文章增刪改查進(jìn)行優(yōu)化的方法,結(jié)合實(shí)例形式分析了Laravel框架中使用memcached緩存實(shí)現(xiàn)針對(duì)增刪改查等操作的優(yōu)化功能,需要的朋友可以參考下2016-10-10
Ajax實(shí)時(shí)驗(yàn)證用戶名/郵箱等是否已經(jīng)存在的代碼打包
一個(gè)網(wǎng)站采用Ajax技術(shù),不僅可以改善網(wǎng)站的用戶體驗(yàn)性,而且大大節(jié)約了寶貴的帶寬,減輕了服務(wù)器負(fù)荷(不再需要交互整個(gè)網(wǎng)頁(yè)內(nèi)容,而是局部)。2011-12-12
免費(fèi)手機(jī)號(hào)碼歸屬地API查詢接口和PHP使用實(shí)例分享
最近在做全國(guó)性的行業(yè)分類信息網(wǎng)站,需要用到手機(jī)號(hào)歸屬地顯示功能,于是就穿梭于各大權(quán)威站點(diǎn)之間偷來了API的接口地址。 分享出來,大家可以用到就拿去呵2014-04-04

