我有一个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等,则存在
答案 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的含义是什么。