/

Laravel中的動態路由

Laravel中的動態路由

本教程是Laravel手冊的一部分。從https://flaviocopes.com/access/下載。

我們已經了解了如何在 routes/web.php 文件中創建一個路由:

1
2
3
Route::get('/dogs', function () {
return view('dogs');
})->name('dogs');

這是一個靜態路由,對應於 /dogs URL。

現在假設你想為每一只狗創建一個頁面,也許你會在上面填寫一個描述、一張圖片等等。

你不能為數據庫中的每一只狗創建一個靜態路由,因為你不知道狗的名字。

假設你有兩只狗,Max和Daisy,下面的代碼將在 /dogs/max/dogs/daisy 上顯示一個“dog”視圖(我們尚未創建):

1
2
3
4
5
6
7
Route::get('/dogs/max', function () {
return view('dog');
})

Route::get('/dogs/daisy', function () {
return view('dog');
})

取而代之,我們在URL中有一個動態分段

1
2
3
Route::get('/dogs/{slug}', function () {
return view('dog');
})

slug是一個用於識別URL部分的詞,全小寫且不含空格,例如如果狗的名字是Max,那麼slug就是max

現在我們可以將slug的值傳遞給回調函數(當路由被命中時調用的函數),並在函數內部將它傳遞給視圖:

1
2
3
Route::get('/dogs/{slug}', function ($slug) {
return view('dog', ['slug' => $slug]);
})

現在$slug變量可以在Blade模板中使用。

但是我們想要檢索實際的狗的數據。我們有slug,可以想象當我們添加狗時,它存儲在數據庫中。

為此,我們在路由中使用了Dog模型,代碼如下:

1
2
3
4
5
6
use App\Models\Dog;

Route::get('/dogs/{slug}', function ($slug) {
$dog = Dog::find($slug)
return view('dog', ['dog' => $dog]);
})

tags: [“routing”, “Laravel”, “dynamic routes”, “slug”]