Reminder控制器的默认postReset()操作具有以下用于重置密码的代码:
$response = Password::reset($credentials, function($user, $password)
{
$user->password = Hash::make($password);
$user->save();
});
如果save方法失败(由于任何原因),我想添加一个取消重置的条件。我的模型在save()事件上调用验证函数,因此如果字段不验证,$ user-> save()将返回false。
我已将代码修改为:
$response = Password::reset($credentials, function($user, $password)
{
$user->password = $password;
# validate before password hashing
if(!$user->validate()) {
Redirect::back()->with('error', 'Validator failed');
return false;
}
# hash password and try to save
$user->password = Hash::make($password);
if(!$user->save()) {
Redirect::back()->with('error', 'Validator failed');
return false;
}
});
if (!$response) {
return Redirect::back()->with('error', 'Validator failed');
}
但是我看到闭包的返回不会影响$ response变量......所以任何想法如何做到这一点?
答案 0 :(得分:0)
用户保存并不意味着它将被验证(当然,如果您使用香草Laravel)。您需要在保存之前亲自验证用户,并在验证失败时重新定向错误,而不是保存失败。 I. e。你需要使用这样的代码:
if($validator->fails() || !$user->save())
{
return Redirect::back()->with('error', 'Failed to save');
}
其中$validator
是您的规则验证者的实例。
答案 1 :(得分:0)
根据neoascetic's comment,我已经能够通过抛出异常来解决这个问题:
try {
$response = Password::reset($credentials, function($user, $password)
{
$user->password = Hash::make($password);
if(!$user->save()) {
# throw exception if save fails
throw new Exception(Password::INVALID_PASSWORD);
}
});
} catch ( Exception $e) {
$response = Password::INVALID_PASSWORD;
}