2015-12-16 41 views

回答

3

也許,而不是刪除驗證規則,相同的行爲可以通過規則設定required=false來完成:

public $validate = array(
    'email' => array(
     'rule' => array('email', true), 
     'message' => 'Please supply a valid email address.', 
     'required' => false 
    ) 
); 

如果您仍希望在運行時刪除規則,請將其設置爲如果從控制器調用Model::validate陣列中的鍵可能會起作用。但是,您可能希望在表單提交之後和保存之前(例如,基於另一個字段的值),在模型中禁用對字段的驗證。在這個階段,驗證規則已經被加載,並且修改Model::validate數組將不起作用。相反,您必須使用ModelValidator對象。

所有驗證規則都存儲在一個ModelValidator對象中,該對象包含模型中每個字段的每個規則集。

像這樣的東西應該工作:

public function beforeValidate($options = array()){ 
    if (!empty($this->data[$this->alias]['csv_field'])) { //example 
     $this->validator()->remove('email'); 
    } 
} 
2

它爲我工作:

unset($this->Customer->validate['email']); 

一般:

​​