CakePHP 3.x:如何动态编辑验证规则

时间:2015-05-09 07:55:47

标签: validation cakephp cakephp-3.0

我无法弄清楚如何动态编辑验证规则,例如在我的控制器中。

我的情况:"用户" table有" email"字段,其值必须是"唯一的"在创建和更新时。 现在没关系,我已经创建了正确的验证规则。

但现在我必须创建一个允许用户恢复密码的操作。因此,用户输入其电子邮件地址的表单必须经过验证才能使用此表单。 之后,操作会检查是否有该电子邮件地址并发送电子邮件以重置密码。

所以:我必须使用验证规则验证表单,但在这种特殊情况下,我不需要电子邮件是"唯一的"。

如何仅针对一个操作更改验证规则?

感谢。

修改

也许这个?

class UsersTable extends Table {
    public function validationDefault(\Cake\Validation\Validator $validator) {    
        //Some rules...

        $validator->add('email', [
            'unique' => [
                'message'   => 'This value is already used',
                'provider'  => 'table',
                'rule'      => 'validateUnique'
            ]
        ]);

        //Some rules...

        return $validator;
    }

    public function validationOnlyCheck(\Cake\Validation\Validator $validator) {
        $validator->remove('email', 'unique');

        return $validator;
    }
}

在我的行动中:

$user = $this->Users->newEntity($this->request->data(), [
    'validate' => 'OnlyCheck'
]);

1 个答案:

答案 0 :(得分:10)

在编辑之后,您的问题是CakePHP 3允许您根据用例使用不同/动态验证规则的预期方式。

use Cake\Validation\Validator;
class UsersTable extends Table {
    public function validationDefault(Validator $validator) {    
        //Some rules...

        $validator->add('email', [
            'unique' => [
                'message'   => 'This value is already used',
                'provider'  => 'table',
                'rule'      => 'validateUnique'
            ]
        ]);

        //Some rules...

        return $validator;
    }

    public function validationOnlyCheck(Validator $validator) {
        $validator = $this->validationDefault($validator);
        $validator->remove('email', 'unique');
        return $validator;
    }
}

然后:

$user = $this->Users->newEntity($this->request->data(), [
    'validate' => 'OnlyCheck'
]);