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