上次我們做個小測試,讓他可以驗證傳入資料內容,但是發生了點小問題...
問題出在當我使用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.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);
如此一來,我們在測試POSTMAN
:
這樣就大功告成拉!
Next station ... GetPost?