Laravel: Routes

Trong bài viết trước mình đã hướng dẫn các bạn cài đặt laravel, trong bài viết này mình sẽ cũng các bạn tìm hiểu về route trong laravel.

1. Routes 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.

Cấu trúc của một route:

Phương thức: get
Đường dẫn: ‘/’ được hiểu là index
Tham số: function()

Trong laravel routes được định nghĩa trong các file route và nằm trong thư mục routes. Các file sẽ tự động được loaded bởi framework. File routes/web.php định nghĩa các route dùng cho web, routes/api.php định nghĩa các route dùng cho api mặc định prefix là api.

1.1 Các method có sẵn:

Ngoài ra còn có:

1.2 Bảo mật  CSRF:

Tất cả các HTML form có method là POSTPUT, hoặc DELETE đều chỉ đến routes được định nghĩa trong middlware web thì cần được thêm trường CSRF token. Nếu không thì request sẽ bị từ chối.

HTML forms không hỗ trợ PUTPATCH hoặc DELETE actions.Vì vậy khi xác định sử dụngPUTPATCHor DELETE trong  HTML form, bạn cần phải thêm trường _methodvào form. Gía trị trường _method sẽ được sử dụng để request HTTP.

Bạn cũng có thể sử dụng @method của Blade directive để tạo _method input:

1.3 Chuyển hướng route:

Để chuyển hướng qua URI khác bạn có thể dùng phương thức Route::redirect. Ví dụ bạn muốn chuyển link bài viết cũ về một link bài viết mới

Mặc định status code là 302 bạn cũng có thể thay đổi bằng cách thêm đối số vào phía sau.

Hoặc sử dụng phương thức Route::permanentRedirect để luôn trả về status code là 301.

1.4 View routes:

Sử dụng phương thức Route:view để gọi view để hiển thị. Các view chứa tại thư mục resources/views

2. Truyền tham số trên route

2.1 Khai báo tham số đầu vào là bắt buộc

Và ta cũng có thể định nghĩa nhiều tham số cho một request:

Note: Các tham số được bọc lại bở dấu {} và nên là các ký tự chữ cái . Không chứa ký tự – . Sử dụng ký tự _ để thay thế.

2.2 Khai báo tham số đầu vào không bắt buộc:

2.3 Đặt điều kiện cho tham số truyền vào với biểu thức chính quy:

3. Định danh và 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()

Các thành phần dùng chung (middleware, namespaces, prefixes) sẽ được gộp lại với nhau với nhóm cha . Các tiền tố, dấu ‘/’ trên URI sẽ được tự động thêm vào một cách phù hợp.

3.1 Middleware:

Định nghĩa theo wiki

Middleware là phần mềm máy tính với nhiệm vụ kết nối các thành phần phần mềm hoặc các ứng dụng với nhau. Phần mềm loại này bao gồm một tập các dịch vụ cho phép sự tương tác giữa các tiến trình chạy trên một hoặc nhiều máy khác nhau. Công nghệ middleware đã được phát triển để cung cấp khả năng hoạt động tương hỗ, phục vụ cho các kiến trúc phân tán thường được để hỗ trợ và đơn giản hóa các ứng dụng phân tán phức tạp.

Nói ngắn gọn hãy xem nó như một bộ lọc, request phải qua bộ lọc này kiểm tra, xử lý 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.

3.2 Namespaces:

Một trường hợp sử dụng chung cho nhóm route giống như PHP namespace được chỉ định với một nhóm của controllers. Bạn có thể sử dụng tham số namespace trong mảng thuộc tính:

Hãy nhớ rằng, mặc định, the RouteServiceProvider bao gồm file route bên trong nhóm namespace, cho phép bạn đăng ký các controller routes không cần xác định đầy đủ tiền tố App\Http\Controllers namespace. Vì vậy, bạn chỉ cần xác định thành phần của tên đó được đưa ra sau namespace App\Http\Controllers.

3.3 Prefixes:

Thuộc tính prefixcó thể sử dụng để thêm tiền tố cho mỗi route trong một nhóm với một URI. ví dụ, bạn có thể muốn tất cả các tiền tố của tất cả các route URIs trong nhóm là manage:

Ta cũng có thể sử dụng kết hợp lại với nhau:

Trên đây mình đã giới thiệu hầu hết những phần cơ bản về route.
Source code

Hi vọng sẽ giúp được bạn. Thanks