Laravel - Đường dẫn: Hướng dẫn cho người mới bắt đầu

Xin chào các bạn đang học Laravel! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị qua thế giới của Laravel routing. Như một người thầy máy tính gần gũi, tôi sẽ hướng dẫn bạn qua khái niệm cơ bản này, đảm bảo bạn hiểu rõ từng bước. Vậy, hãy lấy một tách cà phê (hoặc trà, nếu bạn thích), và chúng ta cùng bắt đầu!

Laravel - Routing

什么是路由 (What is Routing)?

Trước khi bắt đầu, hãy hiểu rõ路由 thực sự là gì. Hãy tưởng tượng bạn đang ở trong một thư viện lớn (mạng internet), và bạn muốn tìm một cuốn sách cụ thể (một trang web). Thư thư viện (bộ định tuyến) sẽ giúp bạn tìm chính xác cuốn sách bạn đang tìm kiếm. Trong phát triển web,路由 (routing) giống như thư thư viện này, hướng dẫn các yêu cầu web đến các phần chính xác của ứng dụng của bạn.

Cơ bản về路由 (Basic Routing)

Hãy bắt đầu từ những điều cơ bản. Trong Laravel, việc xử lý路由 được thực hiện trong tệp routes/web.php. Đây là nơi chúng ta告诉 ứng dụng của mình cách phản hồi với các yêu cầu URL khác nhau.

Đường dẫn đơn giản (Simple Route)

Dưới đây là hình thức đơn giản nhất của một route:

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

Hãy phân tích nó:

  • Route::get()告诉 Laravel phản hồi với một yêu cầu GET.
  • Tham số đầu tiên '/' là đường dẫn URL (trong trường hợp này, trang chủ).
  • Tham số thứ hai là một hàm trả về điều cần gửi lại cho trình duyệt.

Khi bạn truy cập trang chủ của website, bạn sẽ thấy "Hello, World!" được hiển thị.

Đường dẫn đến một view (Route to a View)

Thường xuyên, thay vì chỉ trả về văn bản, chúng ta muốn trả về một trang HTML hoàn chỉnh. Laravel làm điều này rất dễ dàng:

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

Đường dẫn này sẽ trả về view welcome khi ai đó truy cập /welcome. Views là các mẫu HTML được lưu trữ trong thư mục resources/views.

Đường dẫn với Controller

Khi ứng dụng của bạn phát triển, bạn sẽ muốn sử dụng controllers để tổ chức mã tốt hơn:

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

Đường dẫn này告诉 Laravel gọi phương thức index trên UserController khi ai đó truy cập /users.

Tham số đường dẫn (Route Parameters)

Bây giờ, hãy làm cho mọi thứ thú vị hơn. Vậy nếu chúng ta muốn xử lý các đoạn động trong URL của mình thì sao?

Tham số cơ bản (Basic Parameters)

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

Đường dẫn này sẽ khớp với các URL như /user/1, /user/2, v.v. {id} trong URL trở thành một biến được truyền vào hàm.

Tham số tùy chọn (Optional Parameters)

Đôi khi, một tham số có thể là tùy chọn. Chúng ta cũng có thể xử lý điều này:

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

Đường dẫn này sẽ hoạt động cho cả /user/user/Jane. Nếu không có tên được cung cấp, nó sẽ mặc định là 'John'.

Ràng buộc tham số (Parameter Constraints)

Chúng ta cũng có thể thêm các ràng buộc vào tham số bằng cách sử dụng các biểu thức chính quy:

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

Đường dẫn này sẽ chỉ khớp nếu id được cấu thành từ một hoặc nhiều chữ số.

Đường dẫn có tên (Named Routes)

Đường dẫn có tên cho phép bạn tham chiếu đến các route bằng tên thay vì URL. Điều này đặc biệt hữu ích khi bạn cần tạo URL hoặc chuyển hướng trong ứng dụng của mình.

Định nghĩa một đường dẫn có tên (Defining a Named Route)

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

Sử dụng một đường dẫn có tên (Using a Named Route)

Khi một route được đặt tên, bạn có thể tạo URL hoặc chuyển hướng cho route như sau:

// Tạo một URL...
$url = route('profile');

// Tạo một chuyển hướng...
return redirect()->route('profile');

Điều này rất hữu ích vì nếu bạn bao giờ cần thay đổi URL của trang hồ sơ, bạn chỉ cần thay đổi nó ở một nơi (định nghĩa route), và tất cả các tham chiếu đến route có tên sẽ tự động sử dụng URL mới.

Nhóm đường dẫn (Route Groups)

Khi ứng dụng của bạn phát triển, bạn có thể thấy mình cần áp dụng cùng một middleware hoặc tiền tố cho một nhóm route. Laravel cho phép bạn nhóm các route lại với nhau:

Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', function () {
// Yêu cầu xác thực...
});

Route::get('/account', function () {
// Yêu cầu xác thực...
});
});

Điều này áp dụng middleware auth cho cả hai route /dashboard/account.

Phương thức đường dẫn (Route Methods)

Laravel hỗ trợ routing cho tất cả các phương thức HTTP tiêu chuẩn. Dưới đây là bảng tham khảo nhanh:

HTTP Verb Route Method
GET Route::get()
POST Route::post()
PUT Route::put()
PATCH Route::patch()
DELETE Route::delete()
OPTIONS Route::options()

Bạn thậm chí có thể phản hồi với nhiều phương thức HTTP trong một route:

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

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

Và thế là bạn đã bước những bước đầu tiên vào thế giới của Laravel routing. Nhớ rằng, thực hành là cách tốt nhất để hoàn thiện, vì vậy đừng ngại thử nghiệm với các route khác nhau và xem会发生什么.

Trước khi tôi rời đi, đây là một câu đùa về routing cho bạn: Tại sao nhà phát triển lại破产? Vì anh ấy đã dùng hết bộ nhớ cache của mình! ?

Chúc các bạn编码愉快, và mong rằng các route của bạn luôn dẫn bạn đến nơi bạn muốn đến!

Credits: Image by storyset