欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-11-14 19:56:26
前言 在本文中,我们将探讨 laravel web 框架中最重要和最少讨论的功能之一 - 异常处理。 laravel 带有一个内置的异常处理程序,可以让您轻松地以友好的方...

前言

在本文中,我们将探讨 laravel web 框架中最重要和最少讨论的功能之一 - 异常处理。 laravel 带有一个内置的异常处理程序,可以让您轻松地以友好的方式报告和呈现异常。

laravel 自带错误和异常处理,app\exceptions\handler 负责上报异常和如何返回内容,以及未登录的处理。

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

忽略异常

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

protected $dontreport = [
 \illuminate\auth\authenticationexception::class,
 \illuminate\auth\access\authorizationexception::class,
 \symfony\component\httpkernel\exception\httpexception::class,
 \illuminate\database\eloquent\modelnotfoundexception::class,
 \illuminate\validation\validationexception::class,
];

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

几个重要方法

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

report方法

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

if ($exception instanceof abcexception) {
 log::emergency('abc异常', $context);
} else if ($exception instanceof heheexception) {
 log::info('hehe异常', $context);
}

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

render方法

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

if (get_class($exception) == 'exception' || $exception instanceof notallowedexception) {
 return response()->json(['message' => $exception->getmessage()], 400);
} elseif ( $exception instanceof validationexception) {
 return response()->json(['message' => '校验失败', 'errors'=> $exception->validator->errors()], 400);
}

unauthenticated

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

protected function unauthenticated($request, authenticationexception $exception)
{
 if ($request->expectsjson()) {
  return response()->json(['error' => 'unauthenticated.'], 401);
 }
 
 //如果是后台页面未认证,跳转到后台登陆页面
 $guard = $exception->guards();
 if (in_array('admin', $guard)) {
  return redirect()->guest('/admin/login');
 }
 
 return redirect()->guest('login');
}

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

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

官方文档

laravel 5.6

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。