Php 如何处理Laravel 5中的异常和错误消息?
当我遇到此错误时: Connection.php第620行中的QueryException:SQLSTATE[23000]:完整性 违反约束:1062个重复条目 我可以用我自己的flash错误信息来处理它,而不是: 哎呀,看起来好像出了什么事Php 如何处理Laravel 5中的异常和错误消息?,php,laravel,error-handling,exception-handling,laravel-5,Php,Laravel,Error Handling,Exception Handling,Laravel 5,当我遇到此错误时: Connection.php第620行中的QueryException:SQLSTATE[23000]:完整性 违反约束:1062个重复条目 我可以用我自己的flash错误信息来处理它,而不是: 哎呀,看起来好像出了什么事 处理异常和显示自定义响应有两种方法: 1)让框架为您处理它们: 如果您自己不处理异常,Laravel将在类中处理它们: App\Exceptions\Handler 在render方法中,您可以拦截框架引发的所有异常的渲染。 因此,如果您想在出现特定异常
处理异常和显示自定义响应有两种方法: 1)让框架为您处理它们: 如果您自己不处理异常,Laravel将在类中处理它们:
App\Exceptions\Handler
在render
方法中,您可以拦截框架引发的所有异常的渲染。
因此,如果您想在出现特定异常时执行特定操作,可以通过以下方式修改该方法:
public function render($request, Exception $e)
{
//check the type of the exception you are interested at
if ($e instanceof QueryException) {
//do wathever you want, for example returining a specific view
return response()->view('my.error.view', [], 500);
}
return parent::render($request, $e);
}
2)自己处理异常:
您可以使用try-catch
块自己处理异常。例如,在控制器的方法中:
try
{
//code that will raise exceptions
}
//catch specific exception....
catch(QueryException $e)
{
//...and do whatever you want
return response()->view('my.error.view', [], 500);
}
这两种情况之间的主要区别在于,在情况1中,您定义了一种通用的、应用程序范围的方法来处理特定的异常
另一方面,在案例2中,您可以在应用程序的特定点中定义异常阴影
if ($e instanceof \PDOException) {
$dbCode = trim($e->getCode());
//Codes specific to mysql errors
switch ($dbCode)
{
case 23000:
$errorMessage = 'my 2300 error message ';
break;
default:
$errorMessage = 'database invalid';
}
return redirect()->back()->with('message',"$errorMessage");
}
感谢所有我尝试了这两种情况,并且仍然有Oooops页面,我确信我错过了一些东西尝试放置一个
die('catched')代码>语句,查看代码是否正确捕获了异常。如果不是,代码是否在try块内抛出异常?这里您捕获了一个PDOException
,因此您的代码可能出现了PDOException
,而不是问题中所述的QueryException
,亲爱的Moppo,我也尝试了If($e instanceof exception){//do wathever you want,例如,returing一个特定的视图return response()->view('my.error.view',[],500);}return parent::render($request,$e);}并且正在Handler.php中工作,但是在contlloer doss中尝试cacch不起作用,如果希望在控制器中以相同的方式捕获,则应该执行:catch(\pdoExpEv.e)谢谢MopPo,你在那里非常有用,所以在CasChout中它全部丢失了,但是我不明白你在这里要问什么。如果有用的话,请考虑接受/支持我的答案: