很多开发者在开发过程中都会遇到异常,处理过程类似:捕获、处理,其实也是如此。但本文无意过多谈论错误和异常的原理。它只是从laravel自带的Exception开始,讲述了如何更好地处理错误信息。让我举一个简单的例外例子。在laravel中,如果一个Model找不到或者不存在,很容易抛出异常,比如常见的Whoops,somethingwentwrong等等。这也只是在APP_DEBUG=false的情况下,但这并没有给用户带来更多有用的信息。用户::findOrFail(1);findOrFail方法在Model没有的时候会显示:Sorry,thepageyouarelookingnotbefound..这是一个404错误页面,很多时候应该是这样返回的。如果我们想知道更多有用的信息怎么办?try...catch工作中我也喜欢用trycatch来处理可能抛出的异常,也推荐大家这样做。好处是及时捕捉不可预知的错误,给用户更好的体验。简单demo,如下try{$user=User::findOrFail(1);}catch(ModelNotFoundException$exception){returnback()->withError($exception->getMessage())->withInput();}我们也可以这样:if(!User::find(1)){thrownewUserNotFoundException('...',404);}自定义异常Laravel框架允许我们自定义异常来执行命令phpartisanmake:exceptionUserNotFoundException系统会在Exceptions目录下自动创建一个UserNotFoundException类。这个类继承了Exception,这给了我们一个自由发挥的机会。namespaceApp\Exceptions;useException;classUserNotFoundExceptionextendsException{publicfunctionrender($request,$e){if($request->expectsJson()){//如果是ajax请求...}returnredirect()->到('...');}}在Exceptions中判断异常是在Handle.php文件中,我们看到一个render()方法,这是我们判断自定义异常的地方//Handle.phpif($exceptioninstanceofUserNotFoundException){return$exception->render($exception,$request);}可以看到,我们只需要判断抛出的异常是否是UserNotFoundException的实例即可。在UserNotFoundException类中,我们还可以自定义返回的数据格式和状态码等。在工作中,我个人喜欢构建一些自定义的异常类,这样会很好管理。
