iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
0

上次我們做個小測試,讓他可以驗證傳入資料內容,但是發生了點小問題...

問題出在當我使用POST的方式傳輸值會找不到的情況:
發生錯誤

這問題主要出在因為我們是透過CI_Models而不是CI_Controller,但改成Controller就會變得不好管理,無法透過API.php來當橋接進行管理,這時我們應該怎麼做呢?

首先問題來源是抓不到檔案,那這時從哪會用到抓取服務呢?也就是我們新寫的驗證服務,有用到helper,但在Models類別是無法使用的,所以我們要稍微修改一下,首先打開Getpost.php

!#Getpost.php

  /**
   * 專門給API使用,不需要透過CI URL
   * 主要是針對透過授權進入API頁面
   * 事先會把資料抓取出來,所以只需要去做比較即可。
   */
	function getpost_array_for_api($getpostData = array(), $need = array(), $requred = array()){
		$res = array();
		foreach ($need as $key => $value) {
      // 檢查是否在需要名單內
			if (in_array($value, $requred) && !isset($getpostData[$value])){
				return false;
			} else {
        // 檢查是否有檔案的參數
        if (substr($value, 0, 5) == 'FILE_') {
            $res['tmp_'.substr($value, strlen($value) - 5)] = $getpostData[$value];
        } else {
            // 一般的參數
            if (isset($getpostData[$value])) {
                $res[$value] = $getpostData[$value];
            } else {
                $res[$value] = '';
            }
        }
			}
		}
		return $res;
  }

接著回到API進行修改:

!#User.php

$data = $this->getpost->getpost_array_for_api($getpostData, $needsData, $requiredData);

修改API

修改後的作法就是直接透過我們從API.php拿到的$getpostData資料進行驗證,接著report_required也要進行修改:

!#Getpost.php

  /**
   * 檢查必填項目,沒有被填寫到的資料就會被丟回陣列回傳
   */
  function report_required_for_api($getpostData, $requred) {
    $res = array(); // 結果都會儲存到內部

		foreach ($requred as $key => $value) {
			if(!isset($getpostData[$value])){
				$res[] = $value;
			}
    }

    return $res;
  }

接著再回頭改API部分:

!#User.php

$json_arr['requred'] = $this->getpost->report_required_for_api($getpostData, $requiredData);

修改API

如此一來,我們在測試POSTMAN
測試成功

這樣就大功告成拉!

Next station ... GetPost?


上一篇
[Day19] 改造API Part4
下一篇
[Day21] 改造API GetPost?
系列文
你說Codeigniter還能怎麼做?30

尚未有邦友留言

立即登入留言