CakePHP 3.x:如何即时编辑验证规则

CakePHP 3.x: how to edit a validation rule on the fly

我不知道如何即时编辑验证规则,例如在我的控制器中。

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

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

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

如何只更改一个动作的验证规则?

谢谢。


编辑

也许是这个?

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'
]);

您在编辑后提出的问题是 CakePHP 3 允许您对每个用例使用 different/dynamic 验证规则的预期方式。

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'
]);