как создать пользовательское правило проверки для во время обновления записи в CakePHP - PullRequest
0 голосов
/ 03 мая 2018

Я добавил правило для проверки предыдущего пароля при обновлении пользовательской записи, но правило также применимо к созданию записи, я добавил «обновление», но все же оно не работает.

$validator
->scalar('password')
->maxLength('password', 25)
->notEmpty('password', 'Password is required', 'create')
->allowEmpty('password', 'update')
->add('password', 'validFormat', [
        'rule' => ['custom', '/^(?=.*[!@$])(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{6,16}$/i'], 
        'message' => __('Minimum 6 character & alphanumeric with one symbol(!@$) is Required.'), 
        'allowEmpty' => true
])
->add('password', 'custom', [
    'rule' => function($value, $context){
        $user = $this->get($context['data']['id']);

        if ($user) {
            if (!(new DefaultPasswordHasher)->check($value, $user->password)) {
                return true;
            }
        }
        return false;
    }, 
    'message' => 'You cannot use your previous password',
    'allowEmpty' => true
], 'update');

1 Ответ

0 голосов
/ 03 мая 2018

Добавление updated ничего не делает, так как CakePHP не поддерживает его там.

Если вы прочитаете Пользовательские правила проверки , вы увидите, что вы можете использовать $ context ['newRecord'], чтобы определить, является ли это обновлением или созданием.

Итак, первая строка в вашей функции проверки может выглядеть примерно так:

if ($context['newRecord']){
    return true; //new passwords are always valid!
}

Альтернативным способом было бы проверить переменную $ user и добавить ветку else

if($user){
    //you already have code here
}else{
    //add this else to return TRUE because for new user, new password is OK
    return true;
}
...