路由 Route

_xie_發表於2020-12-07

今天看見一個關於路由的功能 『隱性路由模型繫結』

前言

所有的 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 協議》,轉載必須註明作者和本文連結
~邪~

相關文章