Я использую Laravel 5.3. Я хочу использовать проверку формы для проверки хэша для пароля пользователя.
Вот мой код:
$validator = Validator::make($request->all(), [ 'old_password' => 'required|max:20|min:6', 'new_password' => 'required|max:20|min:6', 'new_password_confirm' => 'required|same:new_password', ]); // test old password if (! Hash::check($request->old_password, $user->user_passwd)) { $validator->errors()->add('end', 'The end time must be within three hours of the start'); }
Это не работает, даже если conditon проверен. Я протестировал это:
Validator::extend('old_password', function($attribute, $value) use ($user) { return Hash::check($value, $user->user_passwd); });
Но я не понимаю, как это использовать?
РЕШЕНИЕ :
Хорошо, лучший способ сделать это простым способом, поместить расширение до make:
Validator::extend('checkPassword', function ($attribute, $value, $parameters, $validator) use($user) { return Hash::check($value, $user->user_passwd); }, 'Your message error !'); $validator = Validator::make($request->all(), [ 'old_password' => 'required|max:20|min:6|checkPassword', 'new_password' => 'required|max:20|min:6', 'new_password_confirm' => 'required|same:new_password', ]);
Ваше обычное правило old_password может использоваться как это
$validator = Validator::make($request->all(), [ 'old_password' => 'required|max:20|min:6|checkpassword', 'new_password' => 'required|max:20|min:6', 'new_password_confirm' => 'required|same:new_password', ]);
Расширить валидатор. CheckPassword – это класс с методом isValid ().
Validator::extend('checkpassword', function ($attribute, $value, $parameters, $validator) { return (new CheckPassword($attribute, $value, $parameters, $validator))->isValid(); });
CheckPassword.php будет как
/** * Attribute being tested * * @var mixed */ protected $attribute; /** * Value of the attribute * * @var mixed */ protected $value; /** * Array of parameters passed to the value * * @var array */ protected $parameters; /** * Validator instance * * @var mixed */ protected $validator; /** * Class constructor * * @param mixed $attribute * @param Uploaded $value * @param array $parameters * @param mixed $validator */ public function __construct($attribute, $value, $parameters, $validator) { $this->attribute = $attribute; $this->value = $value; $this->parameters = $parameters; $this->validator = $validator; } public function isValid() { $value = $this->value; //Old password Value //after this you can check hash and return true or false. }
Я нашел решение. Лучший способ сделать это простым способом – разместить расширение до make:
Validator::extend('checkPassword', function ($attribute, $value, $parameters, $validator) use($user) { return Hash::check($value, $user->user_passwd); }, 'Your message error !'); $validator = Validator::make($request->all(), [ 'old_password' => 'required|max:20|min:6|checkPassword', 'new_password' => 'required|max:20|min:6', 'new_password_confirm' => 'required|same:new_password', ]);