优雅地处理异常
上面我们实现邮箱验证时,处理一些非正常流程时使用了 throw new Exception
抛出异常终止流程,比如:
if ($user->email_verified) {
throw new Exception('你已经验证过邮箱了');
}
但是这种异常提示,不够友好。
异常
在本次的项目开发中,我们将异常大致分为 用户异常 和 系统异常
1. 用户错误行为触发的异常
比如上次已经验证过邮箱的用户再次申请激活邮件触发的异常,对于此类我们需要把触发原因告知用户。
我们把这类异常命名为 InvalidRequestException
,可以通过 make:exception
命令来创建:
$ php artisan make:exception InvalidRequestException
新创建的异常文件保存在 app/Exceptions/
目录下:
app/Exceptions/InvalidRequestException.php
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Http\Request;
class InvalidRequestException extends Exception
{
public function __construct(string $message = "", int $code = 400)
{
parent::__construct($message, $code);
}
public function render(Request $request)
{
if ($request->expectsJson()) {
// json() 方法第二个参数就是 Http 返回码
return response()->json(