Categories: LaravelPHP

自訂 Laravel 5 MethodNotAllowedHttpException 的錯誤訊息

和上次的 自訂 TokenMisatchException 錯誤訊息類似,不過這次是分享的是如何自訂 MethodNotAllowedHttpException 的錯誤訊息。
在這個 RESTful API 盛行的時代這個錯誤其實常常冒出來,因此記錄一下….

 

 

Why! 為何需要自訂這個錯誤訊息

一般來說這個問題很容易被開發者忽略,因為在非 debug 模式下最多收到 〝Whoops, looks like something went wrong.〞 的錯誤訊息而已。

但這樣並不是件好事….
在 https://localhost/post_to_create 被乎叫時
理當這支 API 應該要用 POST 的方式進入,但是現在以 GET 的方法打開,自然就會拿到下面的錯誤,這就是個安全性的曝露!


就算在非 debug 模式下只會拿到 〝Whoops, looks like something went wrong.〞 的錯誤訊息,但這也足以讓人知道你是使用 Laravel 進行開發

一來是若呼叫端是 Mobile APP 收到這個錯誤也只會讓他一頭霧水而已…然後就閃退、跳出….
所以我們需要自訂錯誤訊息!

 

 

HOW! 如何自訂錯誤訊息

打開 Handler.php

app/Exceptions/Handler.php

 

找到 public function render 並需求在render 內任意處加入 …
若你要回傳一個 view

if( $e instanceof MethodNotAllowedHttpException){
  return response(view('errors.500'), 500);
}

 

若你要回傳 text

if( $e instanceof MethodNotAllowedHttpException){
  return response('illegal method called', 400);
}

 

若你要回傳 Json

if( $e instanceof MethodNotAllowedHttpException){
  return \Response::json(['message' => 'illegal method called'], 500);
}

 

這麼一來就能輕鬆自訂 Laravel 5 MethodNotAllowedHttpException 的錯誤訊息了。

 


註:

RESTful API

簡單說就是 API 網址精簡化單純而且不需要傳入太多的參數就可以由網址得知 API 的動作。
配合 method 就能由更精簡的網址完成更多的操作
簡單範例如:

GET : https://cola.api/use/ -> 取使用者列表
POST: https://cola.api/use/ -> 新增使用者
PUT: https://cola.api/use/123 -> 修改使用者 id 123
DELETE: https://cola.api/use/123 -> 刪除使用者 id 123

有別於舊有的落落長的 API …

GET : https://cola.api/user?action=create&name=cola&tel=0987654321&address=taiwan-taipei&zip=110&gender=manle&url=cola.workxplay.net

wiki : https://en.wikipedia.org/wiki/Representational_state_transfer
ihower 大神 : https://ihower.tw/blog/archives/1542

可樂

Recent Posts

plain PHP 搭配 Slack 進行錯誤追蹤、回報(Error Tracking、Error Handling)

錯誤追蹤、回報非常重要,看到的錯誤才知道怎麼修。現今 PHP 流行的 Laravel 有很好的 Error Tracking, Error Handling。但 plain PHP 怎麼辦呢? 在 production 為了安全考量會設定…

4 years ago

Drone CI/CD 配合 Github 使用 Rsync 進行 Deploy

jenkins、circleci、travis 或 Gitlab CI 皆為目前暫知名的 CI/CD 服務,各自缺點也不言而喻...過於肥大、收費略高(?)、速度不夠快執問題...此時使用 go language 開發的 Drone 就出現啦,完全 docker 容器化的運行方式讓整個 CI…

4 years ago

Nginx brotli 設定

網頁壓縮技術中 gzip 很好用,deflate 己經過時,但你聽過 brotli 嗎? 有著比 gzip 更好、更快的壓縮效率。看起來利大於弊有什麼不用他的理由嗎?簡單從優、缺點來看 brotli!到底 brotli 布羅特利是什麼、如何設定呢。 目前大多的 web server…

4 years ago

本機使用 Docker 容器內 PHP (wrapper/expose PHP)

為什麼要讓本機使用 Docker 內 PHP? 情境... docker 容器內用的是 PHP 7.4 但你的開發本機還在跑 PHP 5.6 或是更舊,因為 dockerize 的關係會將所有相關環境都轉移到…

4 years ago

為什麼你需要密碼管理工具

為什麼你需要密碼管理工具現代人一天下來需要輸入多少組密碼,工作與生活己經和密碼密不可分! 除了足夠全安的密碼,密碼記錄、儲存的方式又足夠安全嗎?密碼管理工具可以帶來什麼幫助呢? 為什麼你需要密碼管理工具 資安問題!!大多人說著沒做壞事不怕被偷資料、監聽。嚴重曝露出現代人的基本科技素養的低落和無知 🤯 密碼的使用無所不在!! 行動裝置的普及,APP 、手機遊戲、銀行帳戶所有和生活相關的東西都需要密碼!!facebook, line 只要打開 APP 也會輸入密碼只是他是自動輸入、一般情況不可視 (auth token) 一般人最常發生的密碼資安問題…

4 years ago

簡單使用 Mysql Partition 優化查詢

mysql 資料表分區 mysql table partition 從架構上調整 mysql 的查詢效率。mysql DB 的優化可以簡單也能複雜,除了調整設定值。也可以透過水平分割(Horizontal Partitioning)、垂直分割(Vertical Partitioning) 分庫或分表將資料分散儲存減少資料搜尋、group by 時的效能消耗。拆開批次處理,理論上效率都會變好,本文就水平分割的…

4 years ago