Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何处理Laravel 5中的异常和错误消息?_Php_Laravel_Error Handling_Exception Handling_Laravel 5 - Fatal编程技术网

Php 如何处理Laravel 5中的异常和错误消息?

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方法中,您可以拦截框架引发的所有异常的渲染。 因此,如果您想在出现特定异常

当我遇到此错误时:

Connection.php第620行中的QueryException:SQLSTATE[23000]:完整性 违反约束:1062个重复条目

我可以用我自己的flash错误信息来处理它,而不是:

哎呀,看起来好像出了什么事


处理异常和显示自定义响应有两种方法:

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中它全部丢失了,但是我不明白你在这里要问什么。如果有用的话,请考虑接受/支持我的答案: