ThinkPHP?通用的API格式封裝實例代碼
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)用不存在的方法時,就會調(diào)用__call方法,會傳入請求方法和參數(shù)
<?php
declare (strict_types = 1);
namespace app;
use think\App;
use think\exception\ValidateException;
use think\Validate;
/**
* 控制器基礎(chǔ)類
*/
abstract class BaseController
{
/**
* Request實例
* @var \think\Request
*/
protected $request;
/**
* 應(yīng)用實例
* @var \think\App
*/
protected $app;
/**
* 是否批量驗證
* @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()
{}
/**
* 驗證數(shù)據(jù)
* @access protected
* @param array $data 數(shù)據(jù)
* @param string|array $validate 驗證器名或者驗證規(guī)則數(shù)組
* @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方法,這樣就會調(diào)用不存在的控制器的時候會調(diào)用__call方法,會傳入請求的控制器名稱和參數(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);
}
}測試


假定一個成功的請求,測試一下
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ū)別實例分析
這篇文章主要介紹了Yii中CArrayDataProvider和CActiveDataProvider區(qū)別,結(jié)合實例形式分析了Yii中CArrayDataProvider和CActiveDataProvider的具體功能與用法,需要的朋友可以參考下2016-03-03
PHP模板引擎Smarty內(nèi)建函數(shù)foreach,foreachelse用法分析
這篇文章主要介紹了PHP模板引擎Smarty內(nèi)建函數(shù)foreach,foreachelse用法,結(jié)合實例形式分析了foreach,foreachelse的功能與具體使用技巧,需要的朋友可以參考下2016-04-04
Laravel使用memcached緩存對文章增刪改查進行優(yōu)化的方法
這篇文章主要介紹了Laravel使用memcached緩存對文章增刪改查進行優(yōu)化的方法,結(jié)合實例形式分析了Laravel框架中使用memcached緩存實現(xiàn)針對增刪改查等操作的優(yōu)化功能,需要的朋友可以參考下2016-10-10
Ajax實時驗證用戶名/郵箱等是否已經(jīng)存在的代碼打包
一個網(wǎng)站采用Ajax技術(shù),不僅可以改善網(wǎng)站的用戶體驗性,而且大大節(jié)約了寶貴的帶寬,減輕了服務(wù)器負荷(不再需要交互整個網(wǎng)頁內(nèi)容,而是局部)。2011-12-12

