iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
0

上次已經完成取得清單資料等API,今日我們就接下去完成新增、修改與刪除。

同樣的我們先打開controllers/Api.php

// 新增資料
function to_work_insert($path_name, $func_name, $data) {

}

我們同樣在裡面加入先前的資料:

$methods = $this->config->item('routes_table');
$table = $methods[$path_name]['table'];
$info = $methods[$path_name]['detals'][$func_name];

// 驗證需要的元素
$required = array();
foreach ($info['require'] as $keyRequired => $valueRequired) {
  if (!isset($data[$valueRequired])) array_push($required, $valueRequired);
}
// 如果缺少資源跳出
if (sizeof($required) > 0) {
  $json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'MISSING_DATA', $this->language);
  $json_arr['requred'] = $required;
  return $json_arr;
}

接著是要新增的資料:

// 負責寫入元素內容
$query = array();
foreach ($info['query'] as $key => $value) {
  if (isset($data[$key])) $query[$key] = $data[$key];
}

另外我們可能會有一些預設的值,此部分我們先做稍後再加入函式:

// 加入預設條件
$query = array_merge($query, $this->set_default_data($info['default']));

接著再呼叫通用函式並回傳結果:

// 加入邏輯佇列
$dataQuery['data'] = $query;
$dataQuery['table'] = $table;
$response = $this->mod_universal->insert($dataQuery);
$json_arr['response'] = $response;
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'success', 'GET_DATA_SUCCESS', $this->language);
return $json_arr;

如此一來就完成新增,接著我們在新增預設條件,內容可能會牽扯到特別的變數,例如像是時間戳等等:

// 寫入預設條件
function set_default_data($data) {
  $res = array();
  foreach ($data as $key => $value) {
    if ($value == 'code_date') {
      $res[$key] = date('Y-m-d');
    } else if ($value == 'code_time') {
      $res[$key] = date('H:i:s');
    } else if ($value == 'code_timestamp') {
      $res[$key] = time();
    } else if ($value == 'code_uniqid') {
      $res[$key] = uniqid(time());
    } else {
      $res[$key] = $value;
    }
  }
  return $res;
}

如此一來就完成我們所需要的內容,接續著我們來到更新,基本上跟新增差不多,比較不同的是我們需要加入verify的驗證與通用函式的不同:

// 修改資料
function to_work_update($path_name, $func_name, $data) {

}

同樣的加入必要的內容驗證:

$methods = $this->config->item('routes_table');
$table = $methods[$path_name]['table'];
$info = $methods[$path_name]['detals'][$func_name];

// 驗證需要的元素
$required = array();
foreach ($info['require'] as $keyRequired => $valueRequired) {
  if (!isset($data[$valueRequired])) array_push($required, $valueRequired);
}
// 如果缺少資源跳出
if (sizeof($required) > 0) {
  $json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'MISSING_DATA', $this->language);
  $json_arr['requred'] = $required;
  return $json_arr;
}

接著是如資料庫的where

// 負責驗證的元素
$verify = array();
foreach ($info['verify'] as $key => $value) {
  if (isset($data[$value])) {
    if ($key == '_id') {
      $verify[$key] = new MongoId($data[$value]);
    } else {
      $verify[$key] = $data[$value];
    }
  }
}

下一步再加上寫入資料與預設內容:

// 負責寫入元素內容
$query = array();
foreach ($info['query'] as $key => $value) {
  if (isset($data[$key])) $query[$key] = $data[$key];
}

// 加入預設條件
$query = array_merge($query, $this->set_default_data($info['default']));

最後再完成回傳值與通用函式就完成!

// 加入邏輯佇列
$dataQuery['data'] = $query;
$dataQuery['table'] = $table;
$response = $this->mod_universal->update($dataQuery);
$json_arr['response'] = $response;
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'success', 'GET_DATA_SUCCESS', $this->language);
return $json_arr;

緊接著就是刪除,這次刪除是去除data,因為我們沒有要加入內容等等:

// 刪除資料
function to_work_delete($path_name, $func_name, $data) {

}

同樣加入驗證:

$methods = $this->config->item('routes_table');
$table = $methods[$path_name]['table'];
$info = $methods[$path_name]['detals'][$func_name];

// 驗證需要的元素
$required = array();
foreach ($info['require'] as $keyRequired => $valueRequired) {
  if (!isset($data[$valueRequired])) array_push($required, $valueRequired);
}
// 如果缺少資源跳出
if (sizeof($required) > 0) {
  $json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'error', 'MISSING_DATA', $this->language);
  $json_arr['requred'] = $required;
  return $json_arr;
}

接著加入verify

// 負責驗證的元素
$verify = array();
foreach ($info['verify'] as $key => $value) {
  if (isset($data[$value])) {
    if ($key == '_id') {
      $verify[$key] = new MongoId($data[$value]);
    } else {
      $verify[$key] = $data[$value];
    }
  }
}

最後再加入通用函式與回傳內容就大功告成!

// 加入邏輯佇列
$dataQuery['data'] = $query;
$dataQuery['table'] = $table;
$response = $this->mod_universal->delete($dataQuery);
$json_arr['response'] = $response;
$json_arr = $this->mod_config->msgResponse((isset($json_arr))?$json_arr:array(), 'success', 'GET_DATA_SUCCESS', $this->language);
return $json_arr;

透過上述方法很快就了解通用函式的用法,未來我們也一併會一直使用通用函式,讓整個程式更有系統性的去撰寫。

Next station ... Date Library


上一篇
[Day27] RESTful API Part4
下一篇
[Day29] Date Library
系列文
你說Codeigniter還能怎麼做?30

尚未有邦友留言

立即登入留言