Validation 如何在controller-cakephp 2.6.7中禁用有效性规则

Validation 如何在controller-cakephp 2.6.7中禁用有效性规则,validation,cakephp,cakephp-2.6,cakephp-2.x,Validation,Cakephp,Cakephp 2.6,Cakephp 2.x,我使用的是CakePHP2.6.7。我想禁用csv文件上载的验证。在我的情况下,第一个答案是 不适用。我尝试: $this->validator()->remove('email'); 但它不起作用。有什么想法吗?对我来说很有用: unset($this->Customer->validate['email']); 一般而言: unset($this->Model->validate['validated field']); 这对我很有用:

我使用的是CakePHP2.6.7。我想禁用csv文件上载的验证。在我的情况下,第一个答案是 不适用。我尝试:

$this->validator()->remove('email');  
但它不起作用。有什么想法吗?

对我来说很有用:

unset($this->Customer->validate['email']);
一般而言:

   unset($this->Model->validate['validated field']); 
这对我很有用:

unset($this->Customer->validate['email']);
一般而言:

   unset($this->Model->validate['validated field']); 

也许,可以通过在规则中设置
required=false
来实现相同的行为,而不是删除验证规则:

public $validate = array(
    'email' => array(
        'rule' => array('email', true),
        'message' => 'Please supply a valid email address.',
        'required' => false
    )
);
如果您仍然希望在运行时删除该规则,那么如果您从控制器调用它,则在
Model::validate
数组中取消设置该键可能会起作用。但是,您可能希望在表单提交之后和保存之前(例如,基于另一个字段的值)禁用模型中某个字段的验证。在此阶段,已加载验证规则,修改
Model::validate
数组将无效。相反,您必须使用
modelvalidater
对象

所有验证规则都存储在
modelvalidater
对象中,该对象保存模型中每个字段的每个规则集

像这样的方法应该会奏效:

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

也许,可以通过在规则中设置
required=false
来实现相同的行为,而不是删除验证规则:

public $validate = array(
    'email' => array(
        'rule' => array('email', true),
        'message' => 'Please supply a valid email address.',
        'required' => false
    )
);
如果您仍然希望在运行时删除该规则,那么如果您从控制器调用它,则在
Model::validate
数组中取消设置该键可能会起作用。但是,您可能希望在表单提交之后和保存之前(例如,基于另一个字段的值)禁用模型中某个字段的验证。在此阶段,已加载验证规则,修改
Model::validate
数组将无效。相反,您必须使用
modelvalidater
对象

所有验证规则都存储在
modelvalidater
对象中,该对象保存模型中每个字段的每个规则集

像这样的方法应该会奏效:

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