所謂的路由參數及隱試綁定概念?

更新 發佈閱讀 7 分鐘

接續上一章Laravel Request 的概念簡單說明,接下來講 Request 特別的應用,而分享這部分的契機,主要是在新人時期面試時被問到的一題,不知道大家是否有被考過這題? 通常考官的問題:解釋一下關於Laravel 隱式綁定 or 是否聽過隱式綁定?

何謂隱式綁定?

在 Laravel 中,路由參數與隱式綁定是相關的概念。隱式綁定是 Laravel 提供的一種方便的方法,可以讓我們更加方便地處理路由參數,讓我們不需要手動透過參數來查詢資料庫或其它資料儲存系統。

隱式綁定透過 Model Binding 的方式實現。我們可以在路由中定義參數名稱,並在控制器方法的參數中使用相應的 Model 類別來接收這個參數。這個方法會自動根據參數的值查詢相應的資料並返回對應的 Model 實例。

首先先介紹路由參數

在 Laravel 中,可以透過路由參數來取得動態的資料。例如,我們可以設定以下路由:

// routes/web.php
Route::get('/users/{id}', 'UserController@show');

當使用者訪問 /users/1 時,Laravel 會自動將 1 這個值作為 id 的值傳給 UserController@show,我們就可以在 show 方法中取得這個值:。

// UserController@show
public function show($id) {
// $id 為路由參數的值
}

隱式綁定的例子:


Route::get('/users/{user}', 'UserController@show');

public function show(User $user) {
return view('users.show', compact('user'));
}

在上面的例子中,我們使用 {user} 來定義路由參數,並使用 User 類別來接收這個參數。在 show 方法中,我們可以直接使用 $user 來存取相應的 User 實例,而不需要手動查詢資料庫,可以看出其實路由參數與隱式綁定很像吧~

隱式綁定還有很多其他的使用方式,例如使用自定義的查詢器、處理多個路由參數等等。

註:隱式模型綁定不會檢索已被軟刪除的模型。但是,您可以通過使用 withTrashed 方法鏈接到路由的定義中,來指示隱式綁定檢索這些模型,而withTrashed 方法主要是告訴查詢器查詢資料時要包含軟刪除的資料

隱式綁定的其他使用方式

在 Laravel 中,隱式綁定還有很多其他的使用方式。以下是一些常見的例子:

(一)使用自定義的查詢器

在 Laravel 中,我們可以使用自定義的查詢器來處理路由參數。例如,如果我們有一個 Post 模型,並希望能夠根據文章標題來查詢文章,可以使用以下的路由定義:

Route::get('/posts/{post:title}', 'PostController@show');

在上面的例子中,我們使用 {post:title} 來定義路由參數,並使用 Post 類別來接收這個參數。在 Post 模型中,我們可以定義一個自定義的查詢器方法 findByTitle,並在 RouteServiceProvider 中註冊:

class Post extends Model
{
public function scopeFindByTitle($query, $title)
{
return $query->where('title', $title);
}
}

class RouteServiceProvider extends ServiceProvider
{
public function boot()
{
Route::bind('post', function ($value) {
return Post::findByTitle($value)->firstOrFail();
});
}
}

在上面的例子中,我們定義了一個 findByTitle 方法,用來查詢標題等於指定值的文章。在 RouteServiceProvider 中,我們使用 Route::bind 方法來註冊這個路由參數的查詢方式。

透過自定義查詢器做法我們將使用假設瀏覽網址為http://localhost/posts/post-one則 Laravel 將使用路由參數post-one調用 PostController@show 方法,並且在路由參數中將其作為 post:title 的值傳遞給Controller,以便您可以在Controller中處理該文章。


class PostController extends Controller{
public function show(Request $request, Post $post){
// $post 參數會自動綁定到路由中的 {post:title} 參數
// 這意味著 $post 參數包含與路由中的文章標題匹配的文章模型實例
// 您可以透過 $post 參數來獲取文章的屬性
return view('posts.show', ['post' => $post]);
}
}


(二)處理多個路由參數

而在 Laravel 中,也可以同時處理多個路由參數。例如,如果我們有一個 Product 模型,希望能夠根據產品類別和產品 ID 來查詢產品,就可以使用以下的路由定義:

Route::get('/products/{category}/{product}', 'ProductController@show');

在上面的例子中,我們使用 {category}{product} 來定義路由參數,並使用 Product 類別來接收這個參數。在 ProductController 中,我們可以定義一個 show 方法來處理這個請求:

public function show($category, Product $product)
{
// ...
}

在上面的例子中,我們同時接收了 $category$product 兩個參數,分別代表產品類別和產品 ID。由於 $product 參數使用了隱式綁定,Laravel 會自動根據產品 ID 查詢對應的產品。

而更多說明跟範例關於 Laravel 的隱式綁定,亦可以參考官方文件 Laravel Implicit Binding 進一步了解其定義和底層實現。

以上是對於laravel 的路由參數及隱式綁定分享介紹~讓你更方便的對參數做後續的應用處理~希望這份說明能讓大家對 Laravel 中的隱式綁定有更深入的了解。


參考文件

Laravel Implicit Binding

Laravel Route Model Binding

需要理解Laravel Request? 參考底下連結了解

Laravel Request 概念

文章同步更新到potato media🔗

https://www.potatomedia.co/s/lu0NYFr

留言
avatar-img
DDDDD的沙龍
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
DDDDD的沙龍的其他內容
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/09
現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源,並整理筆記
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
看更多
你可能也想看
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
Thumbnail
Laravel的Model是資料和邏輯的核心連接,簡化資料庫操作。本指南著重於Model的基本屬性、方法和Eloquent ORM的使用。我們詳細探討了hasMany、hasOne和belongsTo這些關聯,它們基於外鍵確定資料間的關係。透過本文,您將深入了解如何有效地在Laravel中使用Mod
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
Laravel是一個以MVC(參考:[設計模式]MVC)為架構的PHP Web框架。Laravel支援使用者身份驗證和授權,提供模組化套件系統。Laravel使用Blade模板系統將PHP程式碼與HTML網頁分離。 安裝環境 下載安裝composer https://getcomposer.o
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
本篇深入探討了Model的基本定義、其Controller的關係,以及如何在Controller中使用Model進行CRUD操作。強調了Model的關聯方法,如hasMany,並透過範例程式碼展示了其實際應用。為初學者提供了一個清晰的Laravel入門路徑,同時也為有經驗的開發者提供了實用的參考。
Thumbnail
本篇深入探討了Model的基本定義、其Controller的關係,以及如何在Controller中使用Model進行CRUD操作。強調了Model的關聯方法,如hasMany,並透過範例程式碼展示了其實際應用。為初學者提供了一個清晰的Laravel入門路徑,同時也為有經驗的開發者提供了實用的參考。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
那麼「我要什麼資料」就需要告訴伺服器特定的內容啦,舉例來說: 我要登入,就必須把「帳號」和「密碼」一起帶在請求內,發送給後端進行驗證
Thumbnail
那麼「我要什麼資料」就需要告訴伺服器特定的內容啦,舉例來說: 我要登入,就必須把「帳號」和「密碼」一起帶在請求內,發送給後端進行驗證
Thumbnail
今天要來分享關於 Laravel Request 概念,Request 代表了來自客戶端(瀏覽器)的HTTP請求。這個類型的物件允許您輕鬆地訪問HTTP請求中的各種數據,例如表單數據、路由參數、Cookie、HTTP標頭等。 現在我們來定義及應用吧!
Thumbnail
今天要來分享關於 Laravel Request 概念,Request 代表了來自客戶端(瀏覽器)的HTTP請求。這個類型的物件允許您輕鬆地訪問HTTP請求中的各種數據,例如表單數據、路由參數、Cookie、HTTP標頭等。 現在我們來定義及應用吧!
Thumbnail
Laravel框架中的路由系統是其核心功能之一,它允許開發者輕鬆地定義應用程式的URL結構和相應的邏輯。本篇文章將深入探討Laravel路由的基本概念、進階功能以及實際應用。
Thumbnail
Laravel框架中的路由系統是其核心功能之一,它允許開發者輕鬆地定義應用程式的URL結構和相應的邏輯。本篇文章將深入探討Laravel路由的基本概念、進階功能以及實際應用。
Thumbnail
在公司專案裡,除了使用Laravel 提供的輔助函數外,我們還可以透過建構屬於自己的Helper function 可以方便地執行諸如處理陣列、文件路徑、字符串和路由等操作,來協助我們更方便處理重複的程式碼。
Thumbnail
在公司專案裡,除了使用Laravel 提供的輔助函數外,我們還可以透過建構屬於自己的Helper function 可以方便地執行諸如處理陣列、文件路徑、字符串和路由等操作,來協助我們更方便處理重複的程式碼。
Thumbnail
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
Thumbnail
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News