我应该使用 try-catch 还是内置错误处理?

muk*_*rai 1 php laravel

我目前正在和我的朋友一起做一个项目。他遵循这种编写代码的方法。是好还是坏?我也不是那么有经验的开发人员。

public function store(Request $request)
 {  
    try   
    {  
        $comment = new TicketComment();  
        $comment->content = $request['comment'];  
        $comment->user_id = Auth::user()->id;  
        $comment->ticket_id = $request['ticketId'];  
        $comment->save();  
        $ticket = Ticket::where('id', '=', $comment->ticket_id)->first();  
        $ticket->updated_at = $comment->created_at;  
        $ticket->update();  
    }    
    catch(Exception $e)  
    {  
        request()->session()->flash('unsuccessMessage', 'Failed to add comment !!!');  
        return redirect()->back();  
    }  
    request()->session()->flash('successMessage', 'Comment has been successfully added !!!');  
    return redirect()->back();  
}  
Run Code Online (Sandbox Code Playgroud)

apo*_*fos 5

没有广泛的异常捕获块。仅捕获您期望在该块中抛出的异常,这样您就可以正确记录意外异常并修复代码中可能导致这些异常的任何其他错误,而不是向自己隐藏它们。

如果您必须这样做,那么可能会出现以下情况:

public function store(Request $request)
 {  
    try   
    {  
        $comment = new TicketComment();  
        $comment->content = $request['comment'];  
        $comment->user_id = Auth::user()->id;  
        $comment->ticket_id = $request['ticketId'];  
        $comment->save();  
        $ticket = Ticket::where('id', '=', $comment->ticket_id)->first();  
        $ticket->updated_at = $comment->created_at;  
        $ticket->update();  
    }    
    catch(Exception $e)  
    {  
        if (!($e instanceof SQLException)) {
            app()->make(\App\Exceptions\Handler::class)->report($e); // Report the exception if you don't know what actually caused it
        }
        request()->session()->flash('unsuccessMessage', 'Failed to add comment !!!');  
        return redirect()->back();  

    }  
    request()->session()->flash('successMessage', 'Comment has been successfully added !!!');  
    return redirect()->back();  
}  
Run Code Online (Sandbox Code Playgroud)

这样,仍然会报告任何意外异常,并且您可以稍后查看日志以修复导致异常的任何错误。

提醒一下,从 PHP 7.1 开始,您可以在 catch 块中包含异常联合(参考),例如

try { } 
catch (ExceptionType1|ExceptionType2 $e) {

}
Run Code Online (Sandbox Code Playgroud)

这样你就可以处理你知道可以处理的异常,并让 Laravel 处理你不确定如何处理的异常。

请注意,您通常不必try-catch在控制器代码中包含块,您始终可以使用异常处理程序对所有未处理的异常执行闪现/重定向回组合(如果这是您处理异常的首选方式)。