当前位置:首页 > PHP教程 > php高级应用 > 列表

Laravel中错误与异常处理的用法示例

发布:smiling 来源: PHP粉丝网  添加日期:2018-11-18 14:18:55 浏览: 评论:0 
在本文中,我们将探讨 Laravel Web 框架中最重要和最少讨论的功能之一 - 异常处理。 Laravel 带有一个内置的异常处理程序,可以让您轻松地以友好的方式报告和呈现异常。

Laravel 自带错误和异常处理,AppExceptionsHandler 负责上报异常和如何返回内容,以及未登录的处理。

AppExceptionsHandler 位于 appExceptionsHandler.php,下面介绍这个类的属性和用法。好了,话不多说了,来一起看看详细的介绍吧

忽略异常

在 $dontReport 中可以定义忽略的异常类名:

  1. protected $dontReport = [ 
  2.  \Illuminate\Auth\AuthenticationException::class
  3.  \Illuminate\Auth\Access\AuthorizationException::class
  4.  \Symfony\Component\HttpKernel\Exception\HttpException::class
  5.  \Illuminate\Database\Eloquent\ModelNotFoundException::class
  6.  \Illuminate\Validation\ValidationException::class
  7. ]; 

这些异常就不会经过 report 方法。

几个重要方法

主要介绍这三个方法,report,render 和 unauthenticated 的用法。

report方法

report 方法可以用来记录日志,可以根据不同的异常类型(包括自定义异常类型),如 ClientException,ConnectException 定制不同的日志级别和日志内容。

  1. if ($exception instanceof ABCException) { 
  2.  Log::emergency('ABC异常'$context); 
  3. else if ($exception instanceof HeheException) { 
  4.  Log::info('Hehe异常'$context); 

report 方法没有返回值,也不应该在这里中断程序。

render方法

render 方法可以根据不同的异常类型,返回不同的数据。如:

  1. if (get_class($exception) == 'Exception' || $exception instanceof NotAllowedException) { 
  2.  return response()->json(['message' => $exception->getMessage()], 400); 
  3. elseif ( $exception instanceof ValidationException) { 
  4.  return response()->json(['message' => '校验失败''errors'=> $exception->validator->errors()], 400); 
  5. unauthenticated 

在访问需要登录态的页面时,用户未登录就会进入这个方法进行处理,举个例子说明:

  1. protected function unauthenticated($request, AuthenticationException $exception
  2.  if ($request->expectsJson()) { 
  3.   return response()->json(['error' => 'Unauthenticated.'], 401); 
  4.  } 
  5.    
  6.  //如果是后台页面未认证,跳转到后台登陆页面 
  7.  $guard = $exception->guards(); 
  8.  if (in_array('admin'$guard)) { 
  9.   return redirect()->guest('/admin/login'); 
  10.  } //phpfensi.com 
  11.    
  12.  return redirect()->guest('login'); 

如果是返回 json,则统一返回格式。

默认情况下返回前台的登录页,如果是访问后台页面未登录,则跳转到后台登录页。

官方文档

Laravel 5.6

https://laravel-china.org/docs/laravel/5.6/errors/1373

Tags: Laravel 错误 异常处理

分享到: