我有一个模型,可以在一个字段中存储一个用于不同目的的数字,因为用户选择了一种参数类型(金钱、数字、年龄、标签 ID 等)。所以,我想验证它,并且在模型中我应该把这个字段可以有的所有规则。但是由于它取决于参数类型,它应该根据指定的类型(例如不低于 1000 的钱,18 到 65 岁之间的年龄等)对其进行验证。有没有办法选择规则子集并对其进行验证?
问问题
149 次
1 回答
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));
于 2012-09-06T14:17:15.610 回答