Laravel, PHP

自訂 Laravel 5 MethodNotAllowedHttpException 的錯誤訊息

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

 

 

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

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

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

laravel-MethodNotAllowedHttpException
就算在非 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

發表迴響