Laravel异常:捕获,处理和创建

栏目: PHP · 发布时间: 5年前

内容简介:很多开发者在开发过程中都会遇到异常,处理过程大同小异:捕获然后处理,事实上也确实是如此。但本文不打算谈太多错误与异常的原理,只是从先举个简单的例子,在

很多开发者在开发过程中都会遇到异常,处理过程大同小异:捕获然后处理,事实上也确实是如此。

但本文不打算谈太多错误与异常的原理,只是从 laravel 自带的 Exception 入手,谈一谈怎样用一个更好的方式处理错误信息。

异常

先举个简单的例子,在 laravel 中,如果一个 Model 找不到或者没有,很容易就抛出一个异常,大家常见的 Whoops, something went wrong 诸如此类。这也只是在 APP_DEBUG=false 的情况下,但这并不能带给用户更有用的信息。

User::findOrFail(1);

findOrFail 方法在 Model 没有的情况下会显示: Sorry, the page you are looking for could not be found. 。这是一个 404 的错误页面,很多时候都应该这样返回,如果我们想知道更多有用的信息呢?

try...catch

我在工作中也喜欢用 try catch 来处理可能会抛出的异常,也建议大家这么做。好处是及时捕获不可预知的错误,给用户一个更好的体验。

简单的 demo ,如下

try {
        $user = User::findOrFail(1);
    } catch (ModelNotFoundException $exception) {
        return back()->withError($exception->getMessage())->withInput();
    }

我们也可以这样:

if (! User::find(1)) {
    throw new ModelNotFoundException('...', 404);
}

自定义异常

Laravel 框架允许我们自定义 exception
执行命令

php artisan make:exception UserNotFoundException

系统会自动在 Exceptions 目录下创建一个 UserNotFoundException 类,这个类继承了 Exception ,这就给了我们一个自由发挥的机会

namespace App\Exceptions;

use Exception;

class UserNotFoundException extends Exception
{
    public function render($request, $e) 
    {
        if ($request->expectsJson()) {
            // 如果是ajax请求...
        }
        
        return redirect()->to('...');
    }
}

判断异常

Exceptions 中的 Handle.php 文件中,我们看到有个 render() 方法,这里就是我们判断自定义异常的地方

// Handle.php
if ($exception instanceof UserNotFoundException) {
   return $exception->render($exception, $request);
}

可以看到,我们只需要判断抛出的异常是否是 UserNotFoundException 的实例即可。

而在 UserNotFoundException 类中,我们也可以自定义返回的数据格式和状态码等等。在工作中,我个人比较需要建一些自定义的异常类,也会很好管理。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java并发编程的艺术

Java并发编程的艺术

方腾飞、魏鹏、程晓明 / 机械工业出版社 / 2015-7-1 / 59.00元

并发编程领域的扛鼎之作,作者是阿里和1号店的资深Java技术专家,对并发编程有非常深入的研究,《Java并发编程的艺术》是他们多年一线开发经验的结晶。本书的部分内容在出版早期发表在Java并发编程网和InfoQ等技术社区,得到了非常高的评价。它选取了Java并发编程中最核心的技术进行讲解,从JDK源码、JVM、CPU等多角度全面剖析和讲解了Java并发编程的框架、工具、原理和方法,对Java并发编......一起来看看 《Java并发编程的艺术》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具