经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
Laravel中错误与异常处理的用法示例
来源:jb51  时间:2018/9/25 19:04:23  对本文有异议

前言

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

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

App\Exceptions\Handler 位于 app\Exceptions\Handler.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);
  5. }

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

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

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

官方文档

Laravel 5.6

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

总结

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号