Controller trong Laravel
Trong mô hình MVC, chữ “C” là viết tắt của Controller. Nó được coi như là thành phần điều khiển luồng xử lý giữa Model và View.

Controller là các đối tượng được dùng để tiếp nhận các HTTP Request và trả về các HTTP Response.
Trong Laravel, thay vì chỉ định nghĩa những route của trang web trong file routes/web.php và trực tiếp viết các logic nghiệp vụ ở trong file web.php thì chúng ta có thể đưa các logic nghiệp vụ vào các controller. Thông thường thì các controller nằm trong thư mục app/controllers.
Ví dụ về một controller:
class UserController extends Controller { /** * Show the profile for the given user. */ public function showProfile($id) { $user = User::find($id); return View::make('user.profile', array('user' => $user)); } }
Tất cả các lớp controller đều kế thừa lớp Base Controller có tên là Controller. Lớp Controller này cũng được lưu trữ trong thư mục app/controllers. Khi bạn tạo một controller khác cần kế thừa lớp Controller này. Việc kế thừa từ lớp Controller là cần thiết để tái sử dụng lại một số phương thức đã được định nghĩa sẵn, chẳng hạn như là phương thức “middleware“.
Mỗi controller có thể chứa nhiều phương thức(action) để xử lý các request khác nhau. Chúng ta có thể trỏ các route tới từng action của controller bằng cách chỉ định tên của controller và tên của phương thức tương ứng với route đó.
Chẳng hạn:
Route::get('user/{id}', '[email protected]');
Trong ví dụ này, UserController là tên của controller, showProfile là tên của phương thức xử lý route “user/{id}“. Khi một request được gửi đến route này thì nó sẽ được điều hướng đến phương thức showProfile() của UserController. Các tham số của route (chẳng hạn như `id`) cũng sẽ được truyền sang phương thức showProile().
Controller với một action duy nhất
Đôi khi, chúng ta muốn định nghĩa một controller với một action duy nhất, trong trường hợp này chúng ta có có thể viết phương thức “__invoke“ ở trong controller. Chẳng hạn:
namespace App\Http\Controllers; use App\User; use App\Http\Controllers\Controller; class ShowProfile extends Controller{ /** * Show the profile for the given user. * * @param int $id * @return View */ public function __invoke($id){ return view('user.profile', ['user' => User::findOrFail($id)]); } }
Khi đăng ký route cho các controller với một action duy nhất, chúng ta chỉ cần chỉ định tên của controller là đủ. Chẳng hạn:
Route::get('user/{id}', 'ShowProfile');
Bạn có thể tạo controller có một action duy nhất bằng cách thêm —invokable đằng sau câu lệnh tạo controller:
php artisan make:controller ShowProfile --invokable
Leave a Reply