Trong Laravel, Controller đóng vai trò là cầu nối giữa các yêu cầu HTTP từ người dùng và logic nghiệp vụ (business logic) của ứng dụng. Nó giúp tổ chức mã nguồn tốt hơn và tách biệt logic nghiệp vụ khỏi các yêu cầu HTTP. Controller nhận các yêu cầu từ route, xử lý logic, sau đó trả về phản hồi cho người dùng, thường là các view, JSON, hoặc redirect.
Dưới đây là những khái niệm và thông tin chi tiết về Controller trong Laravel:
Controller trong Laravel chịu trách nhiệm điều khiển luồng dữ liệu giữa các phần khác nhau của ứng dụng. Trong mô hình MVC (Model-View-Controller), Controller là nơi xử lý logic khi nhận dữ liệu từ View, gửi dữ liệu đến Model, và trả về dữ liệu đã xử lý cho View để hiển thị. Mỗi phương thức trong Controller có thể tương ứng với một hành động (action) cụ thể trên ứng dụng.
Trong Laravel, bạn có thể tạo một Controller bằng lệnh artisan:
ProductController
Điều này sẽ tạo một file controller tại thư mục app/Http/Controllers
với nội dung như sau:
index()
Laravel cũng cung cấp một tùy chọn để tạo API Resource Controller, phù hợp với các ứng dụng chỉ cung cấp API mà không cần view. Bạn có thể tạo nó bằng lệnh sau:
create
Laravel hỗ trợ route resource tự động ánh xạ đến các phương thức trong Resource Controller. Bạn chỉ cần khai báo một dòng code cho tất cả các route cần thiết của CRUD:
apiResource
Middleware là các lớp trung gian được sử dụng để lọc các yêu cầu HTTP trước khi chúng được xử lý bởi Controller. Bạn có thể áp dụng middleware cho Controller bằng cách sử dụng phương thức middleware
:
only
Laravel hỗ trợ Dependency Injection để dễ dàng truyền các service hoặc model vào controller. Bạn có thể sử dụng Dependency Injection trong các phương thức của controller hoặc trong constructor.
validate
Bạn cũng có thể tạo một lớp Form Request để tách validation khỏi controller, giúp code dễ bảo trì hơn.
StoreProductRequest
Trong controller, bạn sử dụng class này để validate:
view
Laravel cung cấp nhiều loại Response khác nhau từ controller, bao gồm:
return view('view.name');
return response()->json($data);
return redirect()->route('route.name');
return response()->download($filePath);
Controller trong Laravel là một phần quan trọng giúp tổ chức và điều khiển luồng dữ liệu trong ứng dụng. Bằng cách sử dụng các phương pháp như Resource Controller, Middleware, Dependency Injection và Request Validation, bạn có thể xây dựng các ứng dụng Laravel mạnh mẽ, dễ bảo trì và mở rộng.