0

我有一个模型,可以在一个字段中存储一个用于不同目的的数字,因为用户选择了一种参数类型(金钱、数字、年龄、标签 ID 等)。所以,我想验证它,并且在模型中我应该把这个字段可以有的所有规则。但是由于它取决于参数类型,它应该根据指定的类型(例如不低于 1000 的钱,18 到 65 岁之间的年龄等)对其进行验证。有没有办法选择规则子集并对其进行验证?

4

1 回答 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 回答