gpt4 book ai didi

php - try/catch PHP 不捕获异常(laravel Controller )

转载 作者:行者123 更新时间:2023-12-04 16:42:33 25 4
gpt4 key购买 nike

我正在使用 Laravel 并尝试像使用 java 一样使用 try/catch。不幸的是,它没有按预期工作...没有捕获异常,它没有返回错误消息,而是产生了 422 异常。

这是我的功能:

public function changePassword(Request $request){

try{
if (!(Hash::check($request->get('currentpassword'), Auth::user()->password))) {
return "Your current password does not matches with the password you provided. Please try again.";
}

if(strcmp($request->get('currentpassword'), $request->get('new-password')) == 0){
return "New Password cannot be same as your current password. Please choose a different password.";
}

$validatedData = $request->validate([
'currentpassword' => 'required',
'newpassword' => 'required|string|min:6',
]);

$user = Auth::user();
$user->password = bcrypt($request->get('newpassword'));
$user->save();

return "Password changed successfully !";
}
catch(Exception $error){
return $error->getMessage();
}
}

我这样调用这个方法

Route::post('memberform/changePassword','MemberController@changePassword')->name('changePassword');

在这里我想得到我的异常信息,并显示它。相反,我在使用我的请求时遇到错误,并且未捕获此异常

422 Unprocessable Entity {"message":"The given data was invalid.","errors":{"newpassword":["The newpassword must be at least 6 characters."]}}

非常感谢

最佳答案

您的错误处理代码是正确的。您捕获异常的代码是在 PHP 中执行此操作的方法,它的工作方式与在 Java 中相同(我已经编写了两种代码)。简而言之,您的代码没有任何问题。

我的猜测是两件事之一,我不是 100% 确定其中任何一个:

1) 您正在 OSX 上进行测试,某些 XDebug 设置可能会在大量嵌套的情况下导致错误处理出现问题(我在迁移中亲身经历过这种情况)。 SO XDebug settings problem

2) Laravel 有一个拦截器,可以在错误发生时捕获错误,并且该处理程序已被注入(inject)以优先于您的处理程序。 SO form validation exception not catching

希望这会把你推向正确的方向。很抱歉,这是一个非答案类型的答案。

关于php - try/catch PHP 不捕获异常(laravel Controller ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56796601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com