Cách sử dụng routing trong Laravel

Routing hay route trong Laravel được hiểu là 1 thành phần để điều hướng URL đến controller, đến view cụ thể nào đó … Nghĩa là routing sẽ định nghĩa mỗi một URL cụ thể khi người dùng truy cập trên trình duyệt web thì routing sẽ dựa vào URL đó đã được định nghĩa trong file route hay chưa để gọi controller, hay gọi view tương ứng.

File routes trong Laravel nằm ở đâu?

Toàn bộ những file routes của Laravel được lưu ở thư mục routes. Những file này mặc định sẽ được tự động load khi Laravel framework chạy. File routes/web.php thì sẽ định nghĩa tất cả những routes cho website của bạn. Những routes của web.php thì nằm trong middleware tên là web, middleware này cung cấp những tính năng như là session (lưu phiên làm việc như authentication …), bảo mật CRSF (tạo ra CRSF token cho form). Ngoài ra chúng ta còn có file routes/api.php sẽ định nghĩa tất cả những routes khi chúng ta viết API cho website để giao tiếp với mobile app chẳng hạn. Và những routes của api.php thì nằm trong middleware tên là api.

Để hiểu routing thực sự hoạt động ra sao trong Laravel, chúng ta sẽ đi qua những cách khai báo routing dưới đây

Cách đơn giản nhất: khai báo hàm thực thi cho routing ngay trong file routes

Chúng ta mở file routes/web.php và thêm vào dòng dưới đây

Đoạn code trong file route phía trên nghĩa là khi người dùng truy cập vào đường dẫn URL /hello (ví dụ http://domain.com/hello) thì sẽ thực thi 1 hàm trả về 1 đoạn text “Welcome to laptrinh.info” ra màn hình. Bạn có thể truy cập vào URL phía trên để kiểm tra kết quả (domain.com là domain tương ứng của bạn)

Cách thứ 2: trả về 1 file view khi gọi 1 routing

Routing khi chúng ta gọi mà trả về 1 file view thì chúng ta gọi view routes. Cách khai báo cũng rất đơn giản như sau

Đoạn code trên nghĩa là khi người dùng truy cập vào đường dẫn URL /hello thì Laravel sẽ gọi file view resources/view/hello.blade.php rồi trả về nội dung file view đó trên trình duyệt web.

Ngoài ra chúng ta còn có thể truyền biến vào file view như sau

Đoạn code trên cũng gọi file view tương ứng như trên, nhưng mà sẽ truyền biến $name có giá trị là “laptrinh.info” vào file view. Và chúng ta có thể hiển thị biến $name đó trong file view.

Cách thứ 3: gọi controller từ 1 routing

Đây là cách mà đa phần các bạn khi lập trình web sẽ sử dụng nhiều nhất, đó là gọi 1 controller tương ứng với routing. Đối với 2 cách trên, khi chúng ta khai báo hàm trực tiếp trong file route, hoặc gọi view rồi truyền biến số như trên sẽ làm file route vô cùng dài dòng và khó đọc, khó maintain sau này. Thay vì như vậy chúng ta sẽ gọi controller và mọi logic code sẽ do controller đảm nhiệm, routing chỉ có vai trò điều hướng URL mà thôi

Ví dụ

Đoạn code trên nghĩa là khi người dùng truy cập vào /hello trên ứng dụng web, thì Laravel sẽ gọi hàm index trong file controller nằm ở app/Http/Controllers/HelloController.php

Ngoài ra còn có 1 số cách khai báo route khác như

Redirect route (hay còn gọi là route chuyển hướng)

Nếu bạn muốn user khi truy cập vào 1 URL trên web của bạn sẽ được chuyển hướng (redirect) đến 1 URL khác thì bạn có thể dùng route loại này (thường sẽ rất hữu ích khi SEO cho website). Cách khai báo như sau

Mặc định Route::redirect sẽ trả về mã HTTP code là 302. Nếu bạn muốn thay đổi mã HTTP code (ví dụ thành 301) bạn có thể khai báo như sau

Hoặc bạn có thể sử dụng Route::permanentRedirect để Laravel tự hiểu là trả về 301

Cách phương thức của route

Phương thức của route ở đây là các phương thức truyền data như là GET, POST, PUT, PATCH, DELETE. Chúng ta có thể khai báo phương thức đi kèm với route như sau

Nếu 1 route có 2 hoặc nhiều phương thức mà chúng ta không muốn viết riêng rẽ, ta có thể gộp lại bằng Route::match như sau (bên dưới là gộp 2 phương thức GET và POST)

Hoặc gộp toàn bộ các phương thức bằng Route::any

Bảo vệ CSRF cho form

CSRF là gì? CSRF là viết tắt của chữ Cross Site Request Forgery, là kỹ thuật tấn công bằng cách sử dụng quyền chứng thực của người sử dụng đối với 1 website khác. Nói nôm na CSRF là 1 lỗ hổng bảo mật web mà hacker có thể lợi dụng nó để mượn tay người dùng tấn công 1 website nào đó. Về CSRF các bạn có thể tìm hiểu thêm trên Google.

Để phòng chống việc này khi truyền data trong form, Laravel sẽ cung cấp cho bạn 1 blade directive là @csrf. Đối với các phương thức submit data như POST, PATCH, PUT, DELETE thì bạn nên sử dụng @csrf để bảo mật data. @csrf sẽ tự động sinh ra 1 CSRF token cho mỗi user truy cập vào website. Cách khai báo @csrf trong form như bên dưới

(còn tiếp …)