# laravel 錯誤處理
https://hackmd.io/@javck/ByJgF8HRP/%2FVVqDeWMRSpOIofKG4fk67Q
影片介紹
https://www.youtube.com/watch?v=OCi9ujU6Xrw&ab_channel=Acadea.io
大概講述
## try catch
**find不會錯誤喔 因為他找不到不會錯誤 就沒了
要findOrFail**
https://laraveldaily.com/how-to-catch-handle-create-laravel-exceptions/
https://stackoverflow.com/questions/33444029/error-handling-with-try-and-catch-in-laravel
您在 a 中,namespace因此您應該使用它\Exception來指定全局命名空間:
```
try {
$this->buildXMLHeader();
} catch (\Exception $e) {
return $e->getMessage();
}
```
在你的代碼已經使用了catch (Exception $e)這麼Exception被搜查/為:
`App\Services\PayUService\Exception`
由於里面沒有Exception類,App\Services\PayUService所以它不會被觸發。或者,您可以use在類的頂部使用一條語句,例如use Exception;,然後您可以使用catch (Exception $e)
//try catch必看
https://www.youtube.com/watch?v=RTTXZVIL6tw&t=345s
錯誤可以用基本的Exception
但這樣不能表示錯誤是甚麼 所以最好自己建立

**捕捉錯誤一般用exception
但如果是php的藥用error接收**
https://www.youtube.com/watch?v=NyPsSNrfYCo
## reporter 幫助函式
有時你可能需要報告異常,但不終止當前請求的處理。 report() 幫助函數允許你在不渲染錯誤頁面給用戶的情況下快速報告異常:
```
public function isValid($value)
{
try {
// Validate the value...
} catch (Throwable $e) {
report($e);
return false;
}
}
```
## 自定義 HTTP 錯誤頁面
Laravel 創建了可以輕鬆顯示各種 HTTP 狀態碼的自定義錯誤頁面。例如如果您想要自定義 HTTP 狀態碼為 404 的錯誤頁面,您只需創建 resources/views/errors/404.blade.php 檔案。該檔案用於應用產生的所有 404 錯誤。errors資料夾中的視圖名稱應為它們所對應的 HTTP 狀態碼。由 abort() 引發的 HttpException 實例將作為 $exception 變數傳遞給視圖:
`<h2>{{ $exception->getMessage() }}</h2>`
你可以使用 vendor:publish 這一個 Artisan 命令來發布 Laravel 錯誤頁面模板到專案中。一旦你發布了模板,你就可以根據需要來自定義它們
`php artisan vendor:publish --tag=laravel-errors`
## 自訂錯誤
歐洲laravel
https://www.youtube.com/watch?v=QSUGFJYMPvI
在Handler的render方法會判斷錯誤哪來的

但這樣太累所以自訂義class 這樣外面就不用寫render方法
只要寫class裡面的
原理在這自己看原始碼

但注意這邊 else
如果實現這interface只要這樣寫

這是一樣的
這邊有很多實現interface
你看向錯誤會重導向就是這個



## 使用
像你要發布這個post但他不存在怎辦
要丟錯
丟沒驗證的你就可以這樣

這withMessage的key要對到
@error()裡面喔

###### tags: `Laravel`