#### 創建異常類
創建的異常類在app/Exceptions/目錄下
~~~
php artisan make:exception xxxException
~~~
#### 定義異常類
Laravel 5.5 之后支持在異常類中定義 render() 方法,該異常被觸發時系統會調用 render() 方法來輸出,我們在 render() 里判斷如果是 AJAX 請求則返回 JSON 格式的數據,否則就返回一個錯誤頁面。
~~~
<?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(['msg' => $this->message], $this->code);
}
return view('pages.error', ['msg' => $this->message]);
}
}
~~~
#### 屏蔽異常類進入日志
當異常觸發時 Laravel 默認會把異常的信息和調用棧打印到日志里.而此類異常并不是因為我們系統本身的問題導致的,不會影響我們系統的運行,如果大量此類日志打印到日志文件里反而會影響我們去分析真正有問題的異常,因此需要屏蔽這個行為。
app/Exceptions/Handler.php
~~~
protected $dontReport = [
InvalidRequestException::class,
];
~~~
當一個異常被觸發時,Laravel 會去檢查這個異常的類型是否在 $dontReport 屬性中定義了,如果有則不會打印到日志文件中。