今天看見一個關於路由的功能 『隱性路由模型繫結』
前言
所有的 Laravel 路由都在 routes
目錄中的路由檔案中定義,這些檔案都由框架自動載入。routes/web.php
檔案用於定義 web
介面的路由。這裡面的路由都會被分配給 web 中介軟體組,它提供了會話狀態和 CSRF 保護等功能。定義在 routes/api.php
中的路由都是無狀態的,並且被分配了 api
中介軟體組
routes/api.php 檔案中定義的路由通過 RouteServiceProvider 被巢狀到一個路由組裡面。在這個路由組中,會自動新增 URL 字首 /api
隱式繫結
Laravel 會自動處理定義在路由或控制器行為中,與型別提示的變數名相匹配的路由段名稱的 Eloquent 模型,例如:
1.呼叫模型設一個提示引數
app\Model\user $user
2.變數名與路程引數名一樣
解釋:給一個控制器中調一個模型App\Models\User
在給模型宣告一個提示變數$user
,提示變數名$user
與路由引數名{user}
一樣時,呼叫路由傳入引數該引數就會傳給模型查詢資料,如果該資料庫用沒有該id的例項,自動生成 404 異常。
總結:主要意思就是把引數id
傳給模型,名稱要一樣才能傳,不然模型返回為空(而不是404),但你給模型傳了引數資料庫中查不到會返回 404 異常
Route::get('users/{user}', function (App\Models\User $user) {
return $user->email;
});
官方的描述: 例子中,由於 $user
變數被型別提示為 Eloquent 模型 App\User
,變數名稱又與 URI 中的 {user}
匹配,因此,Laravel 會自動注入與請求 URI 中傳入的 ID 匹配的使用者模型例項。如果在資料庫中找不到對應的模型例項,將會自動生成 404 異常。
指定鍵名
有時是不是希望使用id
以為的列來解析 Eloquert 模型,有下列幾種方法:
1.路由
引數定義指定列:
Route::get('user/{post:name}', function (App\Models\Post $post) {
return $post;
});
使用
name
列解析 Eloquert 模型
2.模型
中定義指定列,重寫 Eloquent 模型上的 getRouteKeyName 方法:
/**
* 獲取該模型的路由的自定義鍵名
*
* @return string
*/
public function getRouteKeyName()
{
return 'name';
}
改變查詢的欄位
路由回退
使用 Route::fallback
方法, 您可以定義一個在沒有其他路由可匹配傳入的請求時才執行的路由。一般來說,未處理的請求會通過應用程式的異常處理程式自動呈現 「404」 頁面。但是由於您可以在 routes/web.php
檔案中定義 fallback
路由,因此 web
中介軟體組中的所有中介軟體都將應用於該路由。當然,您也可以根據需要隨意向此路由新增其他中介軟體:
Route::fallback(function () {
//
});
不需要指定路徑
本作品採用《CC 協議》,轉載必須註明作者和本文連結