提起異常,你們都很反感,當信心滿滿的寫完一段代碼,刷新頁面發現上面寫着大大的 Exception
是最心煩的時候了。模塊給領導演示的時候,若是報了異常,也是最讓人崩潰的時候了。後端
在通常的大型網站中,若是擁有異常處理的機制,那麼將會幫助咱們節省不少不須要的工做,具體以下:網絡
異常是運行中超出了你程序預期的一個東西。編輯器
例如京東有個 輕鬆購
的功能,當點擊的時候會將該商品自動添加到購物車並生成訂單,而後進行支付,這是一個網絡請求,可是在後端實際執行了一系列的事情(如下操做是簡單舉例子便於說明問題,和真實步驟有差別)網站
步驟不少,若是任何一個環節出現問題,就要作響應的處理code
controller
裏面,順序執行,哪一步出錯直接 return
? 這個 controller
該有多長,代碼徹底不可讀,這是典型面向過程了。true
false
判斷?比第一個好,可是就像編輯器多了摺疊功能,其實仍是面向過程的思路。其實咱們能夠定義一個 購買流程的類
和一些異常
了。下面是每一個步驟的分析中間件
BlacklistMiddleware
專門處理黑名單,也是直接跳轉到禁止界面。NoGoodsException
異常,當你業務處理類發現沒有貨,直接拋出該異常。而後在控制器中 try catch
捕獲該異常進行後續處理,或者使用 App\Exceptions\Handler
進行統一處理。這樣的好處就是,你的邏輯徹底分離,不要再在業務邏輯代碼裏面考慮如何返回什麼頁面,要跳轉到哪裏,只考慮拋出合適的異常便可,簡單的能夠直接在 App\Exceptions\Handler
定義通用的捕獲異常處理方式,這樣的表現就很是統一了。若是需求高了,能夠 try catch
後再根據狀況再拋更詳細的異常。blog
對於某些異常,咱們可能須要記錄下來,以便方便發現問題,在 App\Exceptions\Handler
咱們能夠不去記錄一些異常get
最後針對不一樣的異常錯誤,能夠作到相關信息記錄,而咱們只須要根據對應的分類找到對應的類庫就能夠源碼
若是有實現疑問或者須要代碼筆記,能夠加入qq羣交流與獲取源碼筆記:647617935io