Restful 筆記

beatles發表於2018-09-25

Route::resource('photos', 'PhotoController');

這個路由宣告建立多個路由來處理資源上的各種行為。生成的控制器為每個行為保留了方法,同時還包括了 處理 HTTP 動作和 URI 的宣告註釋。

資源控制器操作處理

動作 URI 行為 路由名稱
GET /photos index photos.index
GET /photos/create create photos.create
POST /photos store photos.store
GET /photos/{photo} show photos.show
GET /photos/{photo}/edit edit photos.edit
PUT/PATCH /photos/{photo} update photos.update
DELETE /photos/{photo} destroy photos.destroy
踩坑經歷:

在 reoute/web.php 中沒有使用 Route::resource() 來建立路由, 而是一項一項分開寫的, 到 更新這裡使用的是 Route::patch(), 而在 blade 模板中 使用的 method 是 {{ method_field('put') }} , 這樣就造成了錯誤 no message

試了幾次, 正確的做法是:
  1. 如果使用 Route::resource(), 那麼 blade 模板裡面可以是 put, 也可以是 patch
  2. 如果不使用 Route::resource(), 那麼 blade 模板裡面需要與 Route 設定的 http 請求方法一致, Route::put() 與 {{ method_field('put') }}, Route::patch() 與 {{ method_field('patch') }}
patch 與 put 的區別

定義上: patch 是區域性更新, put 是全部更新; 理論上來說, 如果使用 put 而只傳遞了更新的欄位, 那麼未更新的欄位被清空(也要被更新 => 全部更新)
實際使用上: 後端並沒有按理論上定義的那麼做( Restful 只是個風格, 推薦的標準 ), 所以沒有區別, 可任選其一

本作品採用《CC 協議》,轉載必須註明作者和本文連結