Может быть, вместо того, чтобы извлекать правила проверки, то же самое поведение может быть достигнуто путем установления 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');
}
}