内容简介:很多开发者在开发过程中都会遇到异常,处理过程大同小异:捕获然后处理,事实上也确实是如此。但本文不打算谈太多错误与异常的原理,只是从先举个简单的例子,在
很多开发者在开发过程中都会遇到异常,处理过程大同小异:捕获然后处理,事实上也确实是如此。
但本文不打算谈太多错误与异常的原理,只是从 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
类中,我们也可以自定义返回的数据格式和状态码等等。在工作中,我个人比较需要建一些自定义的异常类,也会很好管理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- js捕获错误信息
- Python捕获所有异常
- Android NativeCrash 捕获与解析
- Wireshark如何捕获USB流量
- 在 Docker 容器中捕获信号
- PostgreSQL 变更事件捕获(CDC)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Android编程权威指南(第3版)
比尔·菲利普斯 (Bill Phillips)、克里斯·斯图尔特 (Chris Stewart)、克莉丝汀·马西卡诺 (Kristin Marsicano) / 王明发 / 人民邮电出版社 / 2017-6 / 129.00元
Big Nerd Ranch 是美国一家专业的移动开发技术培训机构。本书主要以其Android 训练营教学课程为基础,融合了几位作者多年的心得体会,是一本完全面向实战的Android 编程权威指南。全书共36 章,详细介绍了8 个Android 应用的开发过程。通过这些精心设计的应用,读者可掌握很多重要的理论知识和开发技巧,获得宝贵的开发经验。 第3 版较之前版本增加了对数据绑定等新工具的介......一起来看看 《Android编程权威指南(第3版)》 这本书的介绍吧!
UNIX 时间戳转换
UNIX 时间戳转换
正则表达式在线测试
正则表达式在线测试