Простое правило проверки внутри модели

Я сослался здесь Правила проверки Laravel 4.2 - Текущий пароль Должно совпадать со значением БД

Вот мое правило подтверждения пароля:

 public static $ruleschangepwd = array(
    'OldPassword' =>  array( 'required'),  // need to have my rule here
    'NewPassword' => 'required|confirmed|alphaNum|min:5|max:10'
    );

Но у меня есть свои правила в модели

Как я увидел приведенное ниже пользовательское правило в вопросе

Validator::extend('hashmatch', function($attribute, $value, $parameters)
{
    return Hash::check($value, Auth::user()->$parameters[0]);
});
$messages = array(
    'hashmatch' => 'Your current password must match your account password.'
);
$rules = array(
    'current_password' => 'required|hashmatch:password',
    'password'         => 'required|confirmed|min:4|different:current_password'
);

Возможно ли такое правило?

 'OldPassword' =>  array( 'required', 'match:Auth::user()->password') 

Нравится это или любое простое пользовательское правило, кроме приведенного выше?

Примечание. Поскольку я делаю это в модели, я не могу реализовать указанное выше пользовательское правило в своей модели. (или если я могу, как я могу сделать это внутри модели)

Обновлять :

Могу ли я использовать что-то вроде этого

'OldPassword' =>  array( 'required' , 'same|Auth::user()->password'),

Но я должен

Hash::check('plain text password', 'bcrypt hash')

person AngularAngularAngular    schedule 30.12.2014    source источник


Ответы (1)


Вам нужно будет расширить валидатор с помощью пользовательского правила. Однако это не должно быть проблемой, если у вас есть свои правила внутри модели. Вы можете расширить валидатор где угодно, и правило будет доступно глобально.

Я рекомендую вам добавить новый файл в ваш проект app/validators.php

Затем добавьте эту строку внизу app/start/global.php

require app_path().'/validators.php';

Теперь внутри validators.php определите правило проверки

Validator::extend('match_auth_user_password', function($attribute, $value, $parameters){
    return Hash::check($value, Auth::user()->password);
}

(Я немного изменил имя, чтобы оно было более информативным. Вы, очевидно, можете использовать любое имя, которое вам нравится)

И после этого добавьте match_auth_user_password в свои правила:

public static $ruleschangepwd = array(
    'OldPassword' =>  'required|match_auth_user_password',
    'NewPassword' => 'required|confirmed|alphaNum|min:5|max:10'
);
person lukasgeiter    schedule 30.12.2014