Laravel - 路由:初學者指南
你好,有志於成為 Laravel 開發者的你!今天,我們將踏上一段令人興奮的旅程,探索 Laravel 路由的世界。作為你友好的鄰居計算機老師,我將指導你這個基本概念,確保你理解每一步。所以,來一杯咖啡(或者如果你喜歡,來一杯茶),我們來一起深入探討!
什麼是路由?
在我們開始之前,讓我們先了解路由到底是什麼。想像你在一個大圖書館(互聯網)裡,你想找一本特定的書(一個網頁)。圖書管理員(路由器)幫你找到你正在尋找的 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
時調用 UserController
的 index
方法。
路由參數
現在,讓我們來點更有趣的。如果我們想要處理我們 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