从cakephp中的规则子集进行验证

时间:2012-09-05 17:19:47

标签: validation cakephp

我有一个模型,在一个字段中,可以存储一个数字用于不同的目的,因为用户选择一种参数(金钱,数字,年龄,标签ID等)。所以,我想验证它,在模型中我应该放置该字段可以具有的所有规则。但由于它取决于参数类型,因此应根据指定的类型对其进行验证(例如,金额不低于1000,年龄介于18和65之间等)。有没有办法选择一部分规则并对其进行验证?

1 个答案:

答案 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));