12-2
路由模型綁定
-
如果還要更簡單一點,Laravel 提供「路由模型綁定」功能來簡化找出資料的方式,它可以讓我們自己定義一個特定的參數名稱來指示路由解析器去尋找一筆Eloquent紀錄(亦即根據流水號取得該筆資料),並將該資料傳入,而非將流水號傳入。
-
我們先修改路由,將{id}
直接改為{product}
Route::pattern('product', '[0-9]+');
//略
Route::get('/product/{product}', 'ProductController@show')->name('product.show');
-
然後修改控制器\專案\app\Http\Controllers\ProductController.php
,將show()
括號中的$id
改為和路由傳進來的名稱一致,亦即$product
,然後在類型約束(typehint)上加入Product
模型。如此,Laravel 就會自動去抓取該編號的所有資料,因此,以下第3行的$product
實際上是整個Product
模型資料,而非編號。
public function show(Product $product)
{
return view('product.show', compact('product'));
}
- 一般我們稱這方式為「隱式路由模型綁定」