溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用Thinkphp框架怎么開發(fā)一個移動端接口

發(fā)布時間:2020-12-16 16:08:00 來源:億速云 閱讀:189 作者:Leah 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)使用Thinkphp框架怎么開發(fā)一個移動端接口,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

方案一:給原生APP提供api接口

使用TP框架時 放在common文件夾下文件名就叫function.php

<?php
/**
 * Created by zhangkx
 * Email: zkx520tnhb@163.com
 * Date: 2015/8/1
 * Time: 23:15
 */
 
/*************************** api開發(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  返回具體錯誤的提示信息
 * @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  返回具體錯誤的提示信息
 * @param flag success CURD 操作失敗
 * Function descript:返回標(biāo)志信息 ‘Error',和提示信息,當(dāng)前系統(tǒng)繁忙,請稍后重試;
 */
function returnApiErrorExample(){
  $result = array(
    'flag' => 'Error',
    'msg' => '當(dāng)前系統(tǒng)繁忙,請稍后重試!',
  );
  print json_encode($result);
}
 
/**
 * @param null $data
 * @return array|mixed|null
 * Function descript: 過濾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: 過濾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ì)信息

/**
  * 發(fā)布模塊
  * 
  * 獲取信息單個果品詳細(xì)信息
  *
  */
  public function getMyReleaseInfo(){
    //檢查是否通過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').'...';
    //多張圖地址按逗號截取字符串,截取后如果存在空數(shù)組則需要過濾掉
    $releaseInfo['fruit_pic'] = array_filter(explode(',', $releaseInfo['fruit_pic']));
    $fruit_pic = $releaseInfo['fruit_pic'];unset($releaseInfo['fruit_pic']);
    //為圖片添加存儲路徑
    foreach($fruit_pic as $k=>$v ){
      $releaseInfo['fruit_pic'][] = 'http://'.$_SERVER['HTTP_HOST'].'/Uploads/Release/'.$v;
    }
    if($releaseInfo){
      returnApiSuccess('',$releaseInfo);
    }else{
      returnApiError( '什么也沒查到(+_+)!');
    }
  }

findRelease() 方法的model

/**
  * 查詢一條數(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": "蘋果",
    "high_price": "8.0",
    "low_price": "5.0",
    "address": "天津小白樓水果市場",
    "size": "2.0",
    "weight": "2.0",
    "remark": "急需...",
    "fruit_pic": [
      "https://cache.yisu.com/upload/information/20201209/266/41645.png",
      "https://cache.yisu.com/upload/information/20201209/266/41646.jpg"
    ]
  }
}

app端接收到的數(shù)據(jù)(原生json串)

復(fù)制代碼 代碼如下:


{"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"]}}

方案二:另外我們還可以通過ThinkPHP實現(xiàn)移動端訪問自動切換主題模板,這樣也可以做到移動端訪問

ThinkPHP的模板主題機(jī)制,如果只是在PC,只要需修改 DEFAULT_THEME (新版模板主題默認(rèn)是空,表示不啟用模板主題功能)配置項就可以方便的實現(xiàn)多模板主題切換。

  但對于移動端和PC端,也許你會設(shè)計完全不同的主題風(fēng)格,且針對不同的來路提供不同的渲染方式,其中一種比較流行的方法是“響應(yīng)式設(shè)計”,但就本人經(jīng)歷而言,要實現(xiàn)完全的“響應(yīng)式設(shè)計”并不是那么容易,且解決兼容問題也是個難題,假設(shè)是大型站點,比如:淘寶、百度、拍拍這些,響應(yīng)式設(shè)計肯定是滿足不了需求的,而是需要針對手機(jī)訪問用戶提供單獨的手機(jī)網(wǎng)站。

ThinkPHP 完全可以實現(xiàn),而且相當(dāng)簡單。和TPM的智能模版切換引擎一樣,只要對來路進(jìn)行判斷處理即可。

一、將 ismobile() 加入到{項目/Common/common.php}

function ismobile() {
  // 如果有HTTP_X_WAP_PROFILE則一定是移動設(shè)備
  if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
    return true;
  
  //此條摘自TPM智能切換模板引擎,適合TPM開發(fā)
  if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
    return true;
  //如果via信息含有wap則一定是移動設(shè)備,部分服務(wù)商會屏蔽該信息
  if (isset ($_SERVER['HTTP_VIA']))
    //找不到為flase,否則為true
    return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false;
  //判斷手機(jī)發(fā)送的客戶端標(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é)議法,因為有可能不準(zhǔn)確,放到最后判斷
  if (isset ($_SERVER['HTTP_ACCEPT'])) {
    // 如果只支持wml并且不支持html那一定是移動設(shè)備
    // 如果支持wml和html但是wml在html之前則是移動設(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;
 }

二、在{項目/Lib/}創(chuàng)建一個 CommonAction.php,如果你的項目已公共控制器,則無需創(chuàng)建,直接加在里面即可。

Class CommonAction extends Action{
  Public function _initialize(){
    //移動設(shè)備瀏覽,則切換模板
    if (ismobile()) {
      //設(shè)置默認(rèn)默認(rèn)主題為 Mobile
      C('DEFAULT_THEME','Mobile');
    }
    //............你的更多代碼.......
  }
 }

看完上述內(nèi)容,你們對使用Thinkphp框架怎么開發(fā)一個移動端接口有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI