Tại sao action lại phải dùng controller
Như các bạn đã thấy thì ở các bài trước mình thường viết code logic vào trong call back function của route. Lý do mình viết code vào trong đó là cho mọi người dễ hình dung logic vì nó được đặt trong 1 file luôn. Nhưng trên thực tế ứng dụng của mọi người sẽ có rất nhiều route, lúc này nếu như code logic mà đặt trong route luôn thì file này sẽ rất lớn và code lúc này sẽ trở nên rối hơn.
Show Trong Laravel, Controller sẽ là nơi chứa các logic code thay thế cho route. Lúc này bạn có thể gom nhóm một loạt các logic có chung một nghiệp vụ vào một class cho dễ quản lý. VD: Controller Mặc định, Controller trong Laravel được đặt trong thư mục Trong Laravel tất cả các controller đều phải kế thừa class Controller( Để tạo mới một controller trong Laravel các bạn sử dụng artisan command hoặc có thể tạo bằng tay. Đối artisan commadn các bạn sử dụng câu lệnh:
Trong đó: VD: Mình sẽ tạo mới một controller là
Lúc này Laravel sẽ generate cho các bạn một file
Trong trường hợp bạn muốn tạo controller trong một thư mục con nằm trong VD: Tạo mới controller
Lúc này ở route các bạn muốn assign logic cho controller các bạn truyền tham số thứ 2 là một mảng với tham số đầu tiên là class path của controller, tham số thứ 2 là method thực thi. VD: Mình sẽ thêm method show vào trong -
-
2. Single Action Controller.Trong một vài trường hợp nếu bạn chỉ muốn một controller class thực thi một hành động duy nhất, thì các bạn cũng có thể thêm một phương thức như phần trên rồi assign chúng vào route. Hoặc có thể viết chúng trong phương thức
VD: Single action Controller. -
-
Đối với trường hợp các bạn muốn tạo một controller như trên, các bạn có thể truyền thêm option VD: Tạo single action controller
3. Middleware trong Controller.Ở bài middleware mình mới chỉ hướng dẫn mọi người cách assign middleware vào trong route thôi. Và trong Laravel các bạn có thể assign middleware vào trong controller với method middleware. VD: Mình sẽ assigne middleware auth vào trong controller
Nếu bạn muốn chỉ định middleware hoạt động cho một vài method nào đó trong controller các bạn có thể đặt middleware trong method đó. Hoặc sử dụng phương thức VD: middleware cho hành động
Hoặc
Nếu bạn muốn middleware hoạt động với tất cả action trong controller và bỏ qua một vài action nào đó, các bạn có thể sử dụng phương thức VD: assign middleware auth cho controller
4. Resource Controller.Resource controller trong Laravel là một dạng controller cung cấp sẵn các action Để tạo resource controller trong Laravel các bạn sử dụng command:
Trong đó: VD: Mình sẽ tạo một resource controller là
Lúc này Laravel sẽ sinh ra cho chúng ta file
Lúc này để assign route cho resource controller các bạn sử dụng phương thức resource. VD:
Để xem danh sách các route các bạn sử dụng command:
Kết quả: Như các bạn cũng đã thấy các action tương ứng với các route, route name,... Mình khỏi phải giải thích nhiều :D Trong trường hợp bạn muốn sử dụng thêm route model binding trong route (xem hướng dẫn) trong resource controller các bạn có thể sử dụng command
Trong đó Trong một số trường hợp, bạn không muốn sử dụng tất cả các action trong controller thì ở route các bạn sử dụng phương thức VD: Loại bỏ action
Hoặc các bạn có thể sử dụng phương thức VD: Chỉ sử dụng action
Trong một số trường hợp, bạn muốn thay đổi route name cho một action nào đó trong resource controller các bạn có thể sử dụng phương thức VD: Thay đổi route name cho action
Bạn cũng có thể thay đổi route parameters cho resource controller, bằng cách sử dụng phương thức VD: Thay đổi
parameter
5. API Resource Routes.Trong trường hợp ứng dụng của bạn chỉ cần cung cấp các action như một API Resfull. Thì bạn có thể sử dụng API Resource route. Lúc này các route sẽ bỏ qua các action VD: Chuyển
Bạn có thể chạy route:list để xem kết quả: 6. Lời kết.Về controller trong Laravel, chúng ta tạm dừng ở đây thôi nhé. Bài sau mình sẽ giới thiệu với mọi người về URL generation trong Laravel 8. |