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

Validation CakePHP 3.x:如何动态编辑验证规则,validation,cakephp,cakephp-3.0,Validation,Cakephp,Cakephp 3.0,我不知道如何动态编辑验证规则,例如在我的控制器中 我的案例:“用户”表有“电子邮件”字段,在创建和更新时,其值必须是“唯一的”。 现在还可以,我已经创建了正确的验证规则 但现在我必须创建一个允许用户恢复密码的操作。所以有一个表单,用户在其中输入他们的电子邮件地址,这个表单必须经过验证。 之后,操作将检查是否存在该电子邮件地址,并发送电子邮件重置密码 因此:我必须使用验证规则验证表单,但在这种特殊情况下,我不需要电子邮件是“唯一的” 如何仅为一个操作更改验证规则 谢谢 编辑 也许是这个 clas

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

我的案例:“用户”表有“电子邮件”字段,在创建和更新时,其值必须是“唯一的”。 现在还可以,我已经创建了正确的验证规则

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

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

如何仅为一个操作更改验证规则

谢谢


编辑

也许是这个

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允许您在每个用例中使用不同/动态验证规则的预期方式

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

对我来说,这听起来好像你应该使用一个单独的验证器,因为这只是一个甚至不需要保存的字段?谢谢@ndm,也许我可以这样做:对于这个特定的情况,我使用一个新的验证器来扩展原来的验证器(
UserOnlyCheckValidator extensed UserValidator
)。在新的验证器中,我只使用了该规则。你在想什么?@ndm,看我的最后一篇文章,你救了我一天;)