iT邦幫忙

2024 iThome 鐵人賽

DAY 14
1
Modern Web

後端菜雞仔想學 Laravel系列 第 14

try...catch:去吧!神奇寶貝球

  • 分享至 

  • xImage
  •  

昨天使用 Postman 測試,最後再次按下 Send
狀態顯示 404 並出現報錯訊息,因為已經沒有 id 1 的資料可以被刪除!

https://ithelp.ithome.com.tw/upload/images/20240928/20169300XCaU5iO1qV.jpg

錯誤異常的處理

通常我們自己在使用網站時,如果你今天是處理產品上下架的人員,當你將產品下架並刪除的時候,如果突然出現一堆亂碼,你當下肯定會不曉得發生了什麼事!

「因為已經沒有 id 1 的資料可以被刪除,所以出現錯誤異常。」

這種類型的錯誤異常,我覺得它對我來說不是「真正的出錯」,而只是我們做的這個「工作流程」還不完整,就是還沒有收尾的概念!

站在使用者體驗的角度,我們需要將這個錯誤異常做一個處理。
例如:顯示一個「此產品已刪除」,或是「找不到此產品!」的訊息。

讓使用者明白是發生什麼事情,而這種處理是重要的。

那麼今天就來針對「刪除產品」這個工作流程所產生的錯誤異常做處理。


打開 ProductController.php

更改 destroy:

public function destroy($id)
{
    $product = Product::find($id);
    // 如果找不到就顯示 404 狀態碼及其錯誤訊息
    if (!$product) {
        return response()->json(['error' => '找不到此商品!'], Response::HTTP_NOT_FOUND);
    }
    // 捕捉可能的例外
    try {
        // 刪除商品
        $product->delete();
        // 如果刪除失敗就顯示 500 狀態碼及錯誤訊息
    } catch (Exception $e) {
        return response()->json(['error' => '刪除此商品失敗!'], Response::HTTP_INTERNAL_SERVER_ERROR);
    }
        
    // 如果成功刪除就回傳空白內容並給 204 狀態碼
    return response(null, Response::HTTP_NO_CONTENT);
}

try...catch

我們在使用應用程式時,總是會有很多意外可能會發生,預想得到或預想不到的,造成程式無法繼續正常進行。
所以在錯誤異常處理這一個部份,通常搭配使用 try...catch 捕捉可能的例外,讓我們知道這個錯誤是什麼方向。

那這個顯示 500 狀態碼的錯誤,我通常就會認為是「真正的出錯」,進而尋找出錯原因,並解決它。

try 區塊:

這裡是執行實際的刪除操作。如果刪除成功,程式會繼續往下執行。

catch 區塊:

如果在刪除的過程中發生了任何錯誤(例如資料庫連線問題、刪除權限不足等),就會跳到這個區塊。
這時候會回傳一個 JSON 格式的錯誤訊息,並給 500 的狀態碼,表示「伺服器錯誤」,讓我們知道刪除失敗。

使用 try...catch 將你預想得到或預想不到的錯誤捕捉!
感覺好像神奇寶貝球,現在大家都已經習慣寶可夢了嗎?我還是比較喜歡神奇寶貝(笑)

更多詳細的資訊可以參考以下文章及官方文件:

使用 Postman 測試

https://ithelp.ithome.com.tw/upload/images/20240928/20169300dyZEVBXklP.jpg

有顯示設定好的訊息,所以測試成功囉!


上一篇
為什麼找不到資料就是 404 不是 444 呢?:關於 HTTP 狀態碼
下一篇
修改單一產品部分資料:sometimes 規則
系列文
後端菜雞仔想學 Laravel30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言