Laravel - 路由:初學者指南

你好,有志於成為 Laravel 開發者的你!今天,我們將踏上一段令人興奮的旅程,探索 Laravel 路由的世界。作為你友好的鄰居計算機老師,我將指導你這個基本概念,確保你理解每一步。所以,來一杯咖啡(或者如果你喜歡,來一杯茶),我們來一起深入探討!

Laravel - Routing

什麼是路由?

在我們開始之前,讓我們先了解路由到底是什麼。想像你在一個大圖書館(互聯網)裡,你想找一本特定的書(一個網頁)。圖書管理員(路由器)幫你找到你正在尋找的 exact 書。在網頁開發中,路由就像這個圖書管理員,將網頁請求導向應用的正確部分。

基本路由

讓我們從基礎開始。在 Laravel 中,路由是在 routes/web.php 文件中處理的。這是我們告訴我們的應用如何回應不同 URL 請求的地方。

簡單路由

這是最簡單的路由形式:

Route::get('/', function () {
return 'Hello, World!';
});

讓我們分解這個:

  • Route::get() 告訴 Laravel 回應一個 GET 請求。
  • 第一個參數 '/' 是 URL 路徑(在這個例子中,是首頁)。
  • 第二個參數是一個函數,它返回應該發送回瀏覽器的內容。

當你訪問你的網站首頁時,你會看到 "Hello, World!" 被顯示出來。

導向頁面的路由

通常,我們不僅只想返回文字,我們還想返回一整個 HTML 頁面。Laravel 這方面做得很容易:

Route::get('/welcome', function () {
return view('welcome');
});

這個路由將在有人訪問 /welcome 時返回 welcome 視圖。視圖是存儲在 resources/views 目錄中的 HTML 模板。

帶有控制器的路由

隨著你的應用程序增長,你會想要使用控制器來更好地組織你的代碼:

Route::get('/users', 'UserController@index');

這個路由告訴 Laravel 在有人訪問 /users 時調用 UserControllerindex 方法。

路由參數

現在,讓我們來點更有趣的。如果我們想要處理我們 URL 中的動態段該怎麼辦?

基本參數

Route::get('/user/{id}', function ($id) {
return 'User '.$id;
});

這個路由將匹配像 /user/1/user/2 等的 URL。URL 中的 {id} 變成了一個傳遞給函數的變量。

選擇性參數

有時候,一個參數可能是可選的。我們也可以處理這種情況:

Route::get('/user/{name?}', function ($name = 'John') {
return 'Hello, '.$name;
});

這個路由對於 /user/user/Jane 都有效。如果沒有提供名字,則默認為 'John'。

參數約束

我們還可以使用正則表達式為我們的參數添加約束:

Route::get('/user/{id}', function ($id) {
return 'User '.$id;
})->where('id', '[0-9]+');

這個路由只有當 id 由一個或多個數字組成時才會匹配。

命名路由

命名路由讓你可以通過名稱而不是 URL 來引用路由。這在需要在你應用程序中生成 URL 或重定向時特別有用。

定義命名路由

Route::get('/user/profile', function () {
//
})->name('profile');

使用命名路由

一旦路由被命名,你可以像這樣生成 URL 或重定向:

// 生成 URL...
$url = route('profile');

// 生成重定向...
return redirect()->route('profile');

這非常有用,因為如果你需要更改個人資料頁面的 URL,你只需在路由定義中更改一次,所有對命名路由的引用將自動使用新的 URL。

路由群組

隨著你的應用程序增長,你可能會發現自己在對路由群組應用相同的中间件或前綴。Laravel 讓你可以將這些路由分組:

Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', function () {
// 需要認證...
});

Route::get('/account', function () {
// 需要認證...
});
});

這將 auth 中间件應用於 /dashboard/account 兩個路由。

路由方法

Laravel 支持所有標準的 HTTP 語法。這裡有一個快速參考表:

HTTP 語法 路由方法
GET Route::get()
POST Route::post()
PUT Route::put()
PATCH Route::patch()
DELETE Route::delete()
OPTIONS Route::options()

你可以甚至使用單一路由回應多個 HTTP 語法:

Route::match(['get', 'post'], '/', function () {
//
});

Route::any('/', function () {
//
});

這就是全部!你剛剛踏上了 Laravel 路由世界的第一步。記住,熟能生巧,所以不要害怕嘗試不同的路由並看看會發生什麼。

在我離開之前,這裡有一個路由笑話給你:為什麼開發者破產了?因為他用光了他的緩存!?

快樂編程,願你的路由總是引導你走向你想去的地方!

Credits: Image by storyset