0

#2 Laravel 5: Cơ bản về route

Bắt đầu học Laravel, chúng ta sẽ làm quen với 2 khái niệm thường xuyên sử dụng nhất trong Laravel, đó là route và view. Đây là hai thành phần then chốt; thậm chí chỉ với hai thành phần này, bạn đã có thể tạo được một trang web đơn giản hoàn thiện. Dĩ nhiên, bạn vẫn cần dùng nhiều thành phần khác của Laravel như LaravelCollective, Auth, Eloquent… nhưng tôi nói vậy để các bạn thấy tầm quan trọng của route và view: làm cho coding trở nên hấp dẫn và hạnh phúc. Ở bài này, mình chỉ hướng dẫn cơ bản về route, ở bài tiếp theo sẽ hướng dẫn cách kết hợp giữa route và view.

Route là gì?

Đúng như tên gọi của nó. Route thực hiện chức năng định tuyến, dẫn đường cho các HTTP request được gởi đến đúng nơi ta muốn nó đến. Với các ứng dụng web ngày nay, việc làm cho ứng dụng có chức năng tốt – giao diện đẹp là một chuyện, nhưng để có một trang web thực sự tốt thì “đường dẫn thân thiện” là không thể thiếu.

Ví dụ bạn có 1 trang web thể hiện danh sách xe hơi của hãng Honda:

Thay vì để một đường dẫn ngớ ngẩn như vậy, chúng ta cần tạo ra 1 trang web có thể chạy dưới đường dẫn “đẹp” kiểu như:

Rõ ràng đường dẫn đẹp thì có lợi cho người dùng, rất hiệu quả về mặt marketing cũng như SEO. Nhưng để tạo được đường dẫn đẹp như vậy thường là nỗi đau khổ khi viết bằng cú pháp trong .htaccess. Nắm bắt được điều này, Laravel đã sớm đưa ra tính năng routing để tạo ra các đường dẫn đẹp và đơn giản, mà hiệu quả như một phép màu!

Căn bản về route

Bạn sẽ định nghĩa hầu hết các route của mình trong file App/Http/route.php . Cú pháp cơ bản để tạo route dùng 2 tham số là chuỗi URI và 1 Closure (hàm nặc danh):

Trong đó các hàm get(), post(), put(), delete() chính là các HTTP METHOD dùng cho route. Tham số thứ nhất – URI – là phần phía sau domain trang web. Tham số thứ 2 là hàm nặc danh, thực hiện xử lý cho từng route. Thử truy cập vào địa chỉ http://localhost/ bạn sẽ thấy từ “Hello World”, nhưng khi vào http://localhost/foo/bar thì lại không thấy gì, do phải gởi request qua POST thì request mới qua route này.

Đăng ký route cho nhiều METHOD cùng lúc

Đôi khi bạn sẽ cần xử lý và response giống nhau trên nhiều method, bạn có thể sử dụng hàm Route::match()  để đăng ký cùng lúc nhiều method khác nhau:

Hoặc dùng hàm Route::any()  để đăng ký cho tất cả các method:

Đặt tên cho route và tạo URL

Để khai báo tên cho route, sử dụng từ khóa   as :

Tương tự cũng có thể đặt tên cho route trỏ tới controller actions

Việc đặt tên giúp bạn dễ dàng tạo URL mong muốn. Ví dụ, để tạo URL đến trang profile cá nhân:

Khi số lượng route trên website của bạn tăng lên, các URI dài và khó nhớ, việc đặt tên sẽ hiệu quả hơn nhiều so với việc bạn cộng chuỗi để tạo ra các URL mong muốn.

Route có tham số

Sử dụng tham số

Rất thường xuyên, bạn sẽ có nhu cầu lấy thông tin trong URL người dùng truy cập. Đó có thể là username, id của người dùng; slug của một bản tin, v.v… Bạn có thể định nghĩa tham số trong route như sau:

Bạn có thể định nghĩa nhiều tham số khác nhau trong URI theo nhu cầu sử dụng:

Chú ý: Các tham số phải được định nghĩa trong cặp dấu {} , tên tham số không được chứa dấu (-) nếu cần có thể dùng dấy gạch dưới (_) để thay thế.

Tham số không bắt buộc

Đôi khi bạn sẽ có những route với tham số là không bắt buộc, có cũng được, không có cũng được. Với các tham số dạng này, bạn có thể đặt dấu ( ? ) ngay sau tên tham số để đánh dấu nó là tham số không bắt buộc:

Xác định tham số theo “mẫu ký tự” – Regular Expression

Chúng ta có thể dùng Regex để qui định dạng mẫu cho các tham số ở cùng một vị trí trong URI, bằng cách dùng hàm where()  để khai báo dạng mẫu gì thì tương ứng với tham số nào.

Tạo nhóm route

Tạo nhóm route giúp chúng ta chia sẻ các thành phần dùng chung, giống nhau giữa các route như middleware, namespace hay prefix. Để khai báo các chia sẻ này, ta viết vào một mảng và đặt vào tham số thứ nhất của hàm Route::group()

Chúng ta có một số trường hợp chia sẻ trong nhóm như sau:

Chia sẻ middleware

Một số bạn xem tới đây sẽ hỏi middelware là gì? Nói ngắn gọn hãy xem nó là một bộ lọc, request phải qua bộ lọc này kiểm tra-xử lý gì đó trước khi được gởi tới phần code mà bạn khai báo trong route hay controller actions. Dễ hiểu nhất là trường hợp kiểm tra người dùng đăng nhập rồi mới cho phép comment chẳng hạn.

Để chia sẻ middleware giữa một nhóm route, sử dụng từ khóa middleware :

Chia sẻ namespace

Một trường hợp phổ biến khác là chia sẻ namespace giữa một nhóm các controller. Sử dụng từ khóa namespace  để khai báo:

Nên nhớ routes.php tự hiểu namespace chung của các controller là App\Http\Controllers  nên bạn không cần phải ghi cụ thể ra, chỉ cần ghi tên Controller là đủ.

Chia sẻ tiền tố của URI

Prefix có thể dùng để đặt tiền tố cho một nhóm URI mong muốn. Ví dụ, có thể bạn sẽ muốn gom nhóm tất cả các route của trang quản lý website với tiền tố “backend”:

Bạn cũng có thể đặt tham số trong tiền tố như route bình thường:

Sub-domain routing

Đặc biệt hơn, Laravel còn có khả năng gom nhóm route trên sub-domain, có thể đặt tham số giống như route bình thường khác. Sử dụng từ khóa domain  để khai báo:

Bài kế tiếp trong series Lập Trình Web Với Laravel – Cơ Bản:
#3 Laravel 5: Sử dụng View

Hoàng Tựa

Yêu thích lập trình web và tạo ra những thứ đẹp đẽ.

Leave a Reply

Your email address will not be published. Required fields are marked *