使用Thinkphp框架開(kāi)發(fā)移動(dòng)端接口
方案一:給原生APP提供api接口
使用TP框架時(shí) 放在common文件夾下文件名就叫function.php
<?php /** * Created by zhangkx * Email: zkx520tnhb@163.com * Date: 2015/8/1 * Time: 23:15 */ /*************************** api開(kāi)發(fā)輔助函數(shù) **********************/ /** * @param null $msg 返回正確的提示信息 * @param flag success CURD 操作成功 * @param array $data 具體返回信息 * Function descript: 返回帶參數(shù),標(biāo)志信息,提示信息的json 數(shù)組 * */ function returnApiSuccess($msg = null,$data = array()){ $result = array( 'flag' => 'Success', 'msg' => $msg, 'data' =>$data ); print json_encode($result); } /** * @param null $msg 返回具體錯(cuò)誤的提示信息 * @param flag success CURD 操作失敗 * Function descript:返回標(biāo)志信息 ‘Error',和提示信息的json 數(shù)組 */ function returnApiError($msg = null){ $result = array( 'flag' => 'Error', 'msg' => $msg, ); print json_encode($result); } /** * @param null $msg 返回具體錯(cuò)誤的提示信息 * @param flag success CURD 操作失敗 * Function descript:返回標(biāo)志信息 ‘Error',和提示信息,當(dāng)前系統(tǒng)繁忙,請(qǐng)稍后重試; */ function returnApiErrorExample(){ $result = array( 'flag' => 'Error', 'msg' => '當(dāng)前系統(tǒng)繁忙,請(qǐng)稍后重試!', ); print json_encode($result); } /** * @param null $data * @return array|mixed|null * Function descript: 過(guò)濾post提交的參數(shù); * */ function checkDataPost($data = null){ if(!empty($data)){ $data = explode(',',$data); foreach($data as $k=>$v){ if((!isset($_POST[$k]))||(empty($_POST[$k]))){ if($_POST[$k]!==0 && $_POST[$k]!=='0'){ returnApiError($k.'值為空!'); } } } unset($data); $data = I('post.'); unset($data['_URL_'],$data['token']); return $data; } } /** * @param null $data * @return array|mixed|null * Function descript: 過(guò)濾get提交的參數(shù); * */ function checkDataGet($data = null){ if(!empty($data)){ $data = explode(',',$data); foreach($data as $k=>$v){ if((!isset($_GET[$k]))||(empty($_GET[$k]))){ if($_GET[$k]!==0 && $_GET[$k]!=='0'){ returnApiError($k.'值為空!'); } } } unset($data); $data = I('get.'); unset($data['_URL_'],$data['token']); return $data; } }
查詢(xún)單個(gè)果品詳細(xì)信息
/** * 發(fā)布模塊 * * 獲取信息單個(gè)果品詳細(xì)信息 * */ public function getMyReleaseInfo(){ //檢查是否通過(guò)post方法得到數(shù)據(jù) checkdataPost('id'); $where['id'] = $_POST['id']; $field[] = 'id,fruit_name,high_price,low_price,address,size,weight,fruit_pic,remark'; $releaseInfo = $this->release_obj->findRelease($where,$field); $releaseInfo['remark'] = mb_substr($releaseInfo['remark'],0,49,'utf-8').'...'; //多張圖地址按逗號(hào)截取字符串,截取后如果存在空數(shù)組則需要過(guò)濾掉 $releaseInfo['fruit_pic'] = array_filter(explode(',', $releaseInfo['fruit_pic'])); $fruit_pic = $releaseInfo['fruit_pic'];unset($releaseInfo['fruit_pic']); //為圖片添加存儲(chǔ)路徑 foreach($fruit_pic as $k=>$v ){ $releaseInfo['fruit_pic'][] = 'http://'.$_SERVER['HTTP_HOST'].'/Uploads/Release/'.$v; } if($releaseInfo){ returnApiSuccess('',$releaseInfo); }else{ returnApiError( '什么也沒(méi)查到(+_+)!'); } }
findRelease() 方法的model
/** * 查詢(xún)一條數(shù)據(jù) */ public function findRelease($where,$field){ if($where['status'] == '' || empty($where['status'])){ $where['status'] = array('neq','9'); } $result = $this->where($where)->field($field)->find(); return $result; }
app端接收到的數(shù)據(jù)(解碼json之后)
{ "flag": "success", "message": "", "responseList": { "id": "2", "fruit_name": "蘋(píng)果", "high_price": "8.0", "low_price": "5.0", "address": "天津小白樓水果市場(chǎng)", "size": "2.0", "weight": "2.0", "remark": "急需...", "fruit_pic": [ "http://fruit.txunda.com/Uploads/Release/201508/55599e7514815.png", "http://fruit.txunda.com/Uploads/Release/201508/554f2dc45b526.jpg" ] } }
app端接收到的數(shù)據(jù)(原生json串)
{"flag":"success","message":"","responseList":{"id":"2","fruit_name":"\u82f9\u679c","high_price":"8.0","low_price":"5.0","address":"\u5929\u6d25\u5c0f\u767d\u697c\u6c34\u679c\u5e02\u573a","size":"2.0","weight":"2.0","remark":"\u6025\u9700...","fruit_pic":["http:\/\/fruit.txunda.com\/Uploads\/Release\/201508\/55599e7514815.png","http:\/\/fruit.txunda.com\/Uploads\/Release\/201508\/554f2dc45b526.jpg"]}}
方案二:另外我們還可以通過(guò)ThinkPHP實(shí)現(xiàn)移動(dòng)端訪(fǎng)問(wèn)自動(dòng)切換主題模板,這樣也可以做到移動(dòng)端訪(fǎng)問(wèn)
ThinkPHP的模板主題機(jī)制,如果只是在PC,只要需修改 DEFAULT_THEME (新版模板主題默認(rèn)是空,表示不啟用模板主題功能)配置項(xiàng)就可以方便的實(shí)現(xiàn)多模板主題切換。
但對(duì)于移動(dòng)端和PC端,也許你會(huì)設(shè)計(jì)完全不同的主題風(fēng)格,且針對(duì)不同的來(lái)路提供不同的渲染方式,其中一種比較流行的方法是“響應(yīng)式設(shè)計(jì)”,但就本人經(jīng)歷而言,要實(shí)現(xiàn)完全的“響應(yīng)式設(shè)計(jì)”并不是那么容易,且解決兼容問(wèn)題也是個(gè)難題,假設(shè)是大型站點(diǎn),比如:淘寶、百度、拍拍這些,響應(yīng)式設(shè)計(jì)肯定是滿(mǎn)足不了需求的,而是需要針對(duì)手機(jī)訪(fǎng)問(wèn)用戶(hù)提供單獨(dú)的手機(jī)網(wǎng)站。
ThinkPHP 完全可以實(shí)現(xiàn),而且相當(dāng)簡(jiǎn)單。和TPM的智能模版切換引擎一樣,只要對(duì)來(lái)路進(jìn)行判斷處理即可。
一、將 ismobile() 加入到{項(xiàng)目/Common/common.php}
function ismobile() { // 如果有HTTP_X_WAP_PROFILE則一定是移動(dòng)設(shè)備 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) return true; //此條摘自TPM智能切換模板引擎,適合TPM開(kāi)發(fā) if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT']) return true; //如果via信息含有wap則一定是移動(dòng)設(shè)備,部分服務(wù)商會(huì)屏蔽該信息 if (isset ($_SERVER['HTTP_VIA'])) //找不到為flase,否則為true return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false; //判斷手機(jī)發(fā)送的客戶(hù)端標(biāo)志,兼容性有待提高 if (isset ($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords = array( 'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile' ); //從HTTP_USER_AGENT中查找手機(jī)瀏覽器的關(guān)鍵字 if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) { return true; } } //協(xié)議法,因?yàn)橛锌赡懿粶?zhǔn)確,放到最后判斷 if (isset ($_SERVER['HTTP_ACCEPT'])) { // 如果只支持wml并且不支持html那一定是移動(dòng)設(shè)備 // 如果支持wml和html但是wml在html之前則是移動(dòng)設(shè)備 if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) { return true; } } return false; }
二、在{項(xiàng)目/Lib/}創(chuàng)建一個(gè) CommonAction.php,如果你的項(xiàng)目已公共控制器,則無(wú)需創(chuàng)建,直接加在里面即可。
Class CommonAction extends Action{ Public function _initialize(){ //移動(dòng)設(shè)備瀏覽,則切換模板 if (ismobile()) { //設(shè)置默認(rèn)默認(rèn)主題為 Mobile C('DEFAULT_THEME','Mobile'); } //............你的更多代碼....... } }
通過(guò)以上2種方式均可實(shí)現(xiàn)移動(dòng)端訪(fǎng)問(wèn),一種是原生,一種是偽原生,小伙伴們根據(jù)自己的項(xiàng)目需求來(lái)選擇吧。
- Thinkphp5微信小程序獲取用戶(hù)信息接口的實(shí)例詳解
- ThinkPHP實(shí)現(xiàn)支付寶接口功能實(shí)例
- Thinkphp微信公眾號(hào)支付接口
- thinkPHP框架對(duì)接支付寶即時(shí)到賬接口回調(diào)操作示例
- thinkPHP微信分享接口JSSDK用法實(shí)例
- Thinkphp框架開(kāi)發(fā)移動(dòng)端接口(1)
- thinkPHP框架實(shí)現(xiàn)的短信接口驗(yàn)證碼功能示例
- Thinkphp框架開(kāi)發(fā)移動(dòng)端接口(2)
- ThinkPHP和UCenter接口沖突的解決方法
- ThinkPHP框架實(shí)現(xiàn)的微信支付接口開(kāi)發(fā)完整示例
- thinkPHP5框架接口寫(xiě)法簡(jiǎn)單示例
相關(guān)文章
淺談php中urlencode與rawurlencode的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談php中urlencode與rawurlencode的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09關(guān)于ThinkPhp 框架表單驗(yàn)證及ajax驗(yàn)證問(wèn)題
tp數(shù)據(jù)驗(yàn)證有兩種方式,一種是靜態(tài)方式,一種是動(dòng)態(tài)方式,下面小編給大家?guī)?lái)了ThinkPhp 框架表單驗(yàn)證及ajax驗(yàn)證問(wèn)題,感興趣的朋友一起看看吧2017-07-07Laravel6.0.4中將添加計(jì)劃任務(wù)事件的方法步驟
此版本包括計(jì)劃任務(wù)事件、新的 JSON 斷言方法和所有最新更改。這篇文章主要介紹了Laravel6.0.4中將添加計(jì)劃任務(wù)事件的方法步驟,感興趣的可以了解一下2019-10-10PHP實(shí)現(xiàn)的英文名字全拼隨機(jī)排號(hào)腳本
這篇文章主要介紹了PHP實(shí)現(xiàn)的英文名字全拼隨機(jī)排號(hào)腳本,根據(jù)一個(gè)需求寫(xiě)出的一個(gè)解決方案,需要的朋友可以參考下2014-07-07ThinkPHP使用Smarty第三方插件方法小結(jié)
這篇文章主要介紹了ThinkPHP使用Smarty第三方插件方法,結(jié)合實(shí)例形式總結(jié)分析了ThinkPHP使用Smarty模板的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-03-03php獲得文件夾下所有文件的遞歸算法的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇php獲得文件夾下所有文件的遞歸算法的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11