Laravel 8 路由模組新增 missing 方法

24K大白羊發表於2021-02-19

Laravel 8.26.0 版本及以上,在路由模組新增了一個 missing() 方法,我們在實際開發中,經常使用路由隱形繫結自動查詢對應的資料,減少在 Controller 中自己編寫程式碼。
在之前,如果模型沒有查到對應的資料,會自動跳轉到全域性統一的 404 頁面,不夠靈活。而 missing() 方法就是為了解決這個問題而來的。

Route::get('/users/{user:slug}', [UserController::class, 'show'])
     ->name('user.view')
     ->missing(function (Request $request) {
         return Redirect::route('user.index');
     });

當請求 missing.test/users/dalian 時,如果在使用者表中查不到 slug 為 dalian 的資料,會跳轉到使用者列表的首頁,而不是統一的 404 頁面。

注意:
該方法只適用於路由的隱形繫結才會有效,例如在 Controller 中使用 findOrFail 方法,即使未查到指定的資料,也不會出發 missing 方法,而是會跳轉到統一的 404 頁面。

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

相關文章