如何在控制器中禁用vailidation规则 - cakephp 2.6.7

时间:2015-12-16 19:54:43

标签: validation cakephp cakephp-2.6 cakephp-2.x

我正在使用CakePHP 2.6.7。我想禁用csv文件上传验证。所以就我而言,Disable validation in update form - CakePHP的第一个答案 不适用。我试着用:

$this->validator()->remove('email');  

但它不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

它对我有用:

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

<body>
<nav class="navbar navbar-default">
 <div class="navbar-header">  
  <button type="button" class="navbar-toggle" data-toggle="collapse" 
         data-target="#MyNav">
         <span class="sr-only"></span>
         <span class="icon-bar"></span>
         <span class="icon-bar"></span>
         <span class="icon-bar"></span>
      </button>
    <a class="navbar-brand">Jaso</a>
  </div>
    <div class="collapse navbar-collapse" id="MyNav">
      <ul class="nav navbar-nav navbar-right">
        <li class="active"><a href="#">Home</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Protilio</a></li> 
        <li><a href="#">dontknow</a></li> 
      </ul>
    </div>
  </div>
</nav>

一般来说:

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

答案 1 :(得分: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');
    }
}