Cakephp验证API输入数据

时间:2014-01-22 09:53:16

标签: api validation rest cakephp model

我有一个API,可以接收JSON,XML和FORM数据中的数据。 API需要进行一些验证,具体取决于要验证的数据,具体取决于所提供的数据。我有一个每个API调用所需的“sendmode”字段。如果sendmode = 1,则mobile,firstname和lastname是必填字段,但是,如果sendmode为2,则group为必填字段。

我的问题是,如何根据API调用中提供的数据验证模型中的数据,而无需在控制器的开头执行一堆If语句?

由于

public function api_send() {
    //Get Params
    $data = $this->request->input('json_decode', TRUE);

    //validate here -> first required
    $data['sendmode'] //need to validate
    $data['subject']   //need to validate
    $data['message']  //need to validate

   if($validate == false){
      return;
      break;
   } 

   switch($data['sendmode']){
      case 1:
             $data['mobile'] //need to validate
             $data['firstname']   //need to validate
             $data['lastname']  //need to validate

             if($validate == TRUE){
                 //save data
             }
    //etc

   }
}

所以我想在我的模型中完成所有验证,但首先,我需要验证3个字段,如果这是真的我需要继续,那么如果sendmode为1,我需要验证其他字段,因为这些字段不会如果sendmode是2或4等,则存在

1 个答案:

答案 0 :(得分:0)

首先,将json(?)数据传递给模型方法。模型内部有一个方法可根据类型切换验证规则。

// Controller
$this->Model->validateApiCall($this->request->input('json_decode', TRUE));

// Model
public function setValidationRules($type = 'someDefault') {
    switch($type){
        case SendMode::GROUP_FIELDS:
        $this->validate = array(/* your rules for that type here */);
        // ...

}

public function validateApiCall($data) {
    $this->setValidationRules($data['type']);
    // return or do something else with the data depending on it if its validated or not
    return $this->validate($data);
}

哦,如果你真的想对类型使用整数,我建议使用像SendMode :: GROUP_FIELDS这样的常量。我通常会为此创建一个无表格模型。常量要好得多,因为如果你输入错字会导致语法错误,而使用普通整数时,没有人会记住随机3或4或1的含义是什么。