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
試了幾次, 正確的做法是:
- 如果使用 Route::resource(), 那麼 blade 模板裡面可以是 put, 也可以是 patch
- 如果不使用 Route::resource(), 那麼 blade 模板裡面需要與 Route 設定的 http 請求方法一致, Route::put() 與 {{ method_field('put') }}, Route::patch() 與 {{ method_field('patch') }}
patch 與 put 的區別
定義上: patch 是區域性更新, put 是全部更新; 理論上來說, 如果使用 put 而只傳遞了更新的欄位, 那麼未更新的欄位被清空(也要被更新 => 全部更新)
實際使用上: 後端並沒有按理論上定義的那麼做( Restful 只是個風格, 推薦的標準 ), 所以沒有區別, 可任選其一
本作品採用《CC 協議》,轉載必須註明作者和本文連結