laravel 异常捕获_Laravel异常:捕获,处理和创建

"本文探讨如何在Laravel框架中通过自定义异常处理,提供更好的用户体验。介绍使用`try...catch`捕获异常,创建自定义异常类,并在`ExceptionsHandler.php`中进行渲染,以展示更详细且用户友好的错误信息。"
摘要由CSDN通过智能技术生成

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值