我有一个模型,在一个字段中,可以存储一个数字用于不同的目的,因为用户选择一种参数(金钱,数字,年龄,标签ID等)。所以,我想验证它,在模型中我应该放置该字段可以具有的所有规则。但由于它取决于参数类型,因此应根据指定的类型对其进行验证(例如,金额不低于1000,年龄介于18和65之间等)。有没有办法选择一部分规则并对其进行验证?
答案 0 :(得分:0)
在进行验证之前,您可以在控制器中动态覆盖模型验证规则。因此,对于您的示例,您可以执行以下操作:
控制器中的:
switch ($type) {
case "a":
$this->Model->validate = array(
// validation rules for case A
);
break;
case "b":
$this->Model->validate = array(
// validation rules for case B
);
break;
// etc
}
或者(和更好的恕我直言):
在模型中设置替代验证规则:
public $validateCaseA = array(
// validation rules for case A
);
public $valdayeCaseB = array(
// validation rules for case B
);
并在您的控制器中:
switch ($type) {
case "a":
$this->Model->validate = $this->Model->validateCaseA;
break;
case "b":
$this->Model->validate = $this->Model->validateCaseB;
break;
// etc
}
或者......
模型中的:
public $validateCase = array(
'a'=>array(
// validation rules for case A
),
'b'=>array(
// validation rules for case A
)
//etc
);
控制器中的:
$this->Model->validate = $this->Model->validateCase($type);
如果您的案例规则具有通用验证规则,则可以使用array_merge_recursive来减少规则集之间的重复:
模型中的:
public $commonValidation = array(
//common validation rules
);
控制器中的:
$this->Model->validate = array_merge_recursive($this->Model->commonValidation, $this->Model->validateCase($type));