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

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

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

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

但本文不打算谈太多错误与异常的原理,只是从 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 类中,我们也可以自定义返回的数据格式和状态码等等。在工作中,我个人比较需要建一些自定义的异常类,也会很好管理。


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

查看所有标签

猜你喜欢:

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

Google's PageRank and Beyond

Google's PageRank and Beyond

Amy N. Langville、Carl D. Meyer / Princeton University Press / 2006-7-23 / USD 57.50

Why doesn't your home page appear on the first page of search results, even when you query your own name? How do other web pages always appear at the top? What creates these powerful rankings? And how......一起来看看 《Google's PageRank and Beyond》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具