在更新表单中禁用验证 - CakePHP

时间:2014-06-03 16:58:15

标签: validation cakephp

我有一个用于注册和更新数据的表单。 它工作正常,但是当我更新数据时,模型验证返回false,因为插入的值已经存在。

我有以下代码:

/* Validation Rule*/
public $validate = array(
    'unique' => array(
        'rule' => array('unique', 'field in the table'),
        'message' => 'The field cannot be empty.'
    )
    ...
)
/* Function that check if the value already exists */
public function unique($value, $field) {
    $check = $this->find('count', array(
        'recursive' => -1,
        'conditions' => array(
            $this->Alias.$field => $value
        )
    ));

    return $check == 0;
}

那么,我如何禁用唯一规则,但保留其他规则?

3 个答案:

答案 0 :(得分:4)

您可以在验证规则中添加on,并仅在create上接受此验证:

public $validate = array(
    'unique' => array(
        'rule' => array('unique', 'field in the table'),
        'message' => 'The field cannot be empty.',
        'on' => 'create'
    );
);

参考:

答案 1 :(得分:3)

您可以在从控制器更新数据之前动态删除验证。

  // Completely remove all rules for a field
   $this->validator()->remove('field in the table');

 // Remove 'unique' rule from field in the table
 $this->validator()->remove('field in the table', 'unique');

Removing rules from the set

答案 2 :(得分:0)

我在CakePHP 2.8的MyController中使用了它:

 $this->MyModel->validator()->remove('field_name');