CHƯƠNG 3 : HIỆN THỰC MƠ HÌNH MVC
3.2 TƯƠNG TÁC TRÊN CONTROLLER
3.2.1. GIỚI THIỆU
Theo mẫu thiết kế phần mềm (design pattern) MVC. MVC chia ứng dụng thành 3 phần tương tác được với nhau, mỗi phần đảm nhận vai trò khác nhau. Khi sử dụng đúng cách, mẫu MVC giúp cho người phát triển phần mềm tách biệt các luồng xử lý. Giúp cho hệ thống rõ ràng hơn, dễ xử lý, dễ nâng cấp và phát triển hơn.
Controller đảm nhận xử lý các yêu cầu và trả kết quả về cho người dùng, trong 1 ứng dụng thường có nhiều controller. Trong Laravel, ở mức độ cơ bản các controller được lưu trữ tại app/Http/Controllers.
Tên controller được đề nghị đặt như sau: NAMEController, ví dụ: UserController, StudentController, … Có hậu tố là Controller. Tên controller là tên class và tên file.
Ví dụ 1: minh họa 1 controller cơ bản, controller này được lưu trong file
UserController.php
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class UserController extends Controller{ public function show($id){
//TODO: Write your code here }
Để điều hướng yêu cầu người dùng về đúng controller phải thông qua route. Cú pháp đăng ký như sau:
Route::get('ROUTE_ADDRESS',
Ví dụ 2: khai báo địa chỉ http://laravel.local/user/USER_ID được xử lý trong controller UserController, hàm show thực hiện xử lý
3.2.2. TÙY BIẾN TRONG CONTROLLER
Laravel đề nghị các controller được lưu trữ trong thư mục: App\Http\Controllers. Nếu controller được đặt trong thư mục con của App\Http\Controllers thì khai báo trong route như sau:
Chú ý rằng, Laravel được thiết kế trên ý tưởng tận dụng tối đa nguồn tài nguyên từ cộng đồng lập trình viên trên thế giới, Laravel cho phép các lập trình viên “tiêm chích” vào hệ thống. Cụ thể, đó chính là các vendor. Các vendor được thiết kế tách biệt với Laravel, kết nối với Laravel thơng qua một số khai báo. Chính vì vậy, các controller không hẳn là phải đặt trong thư mục App\Http\Controllers mà cịn có thể được đặt trong các vendor.
Single Action Controller là controller đặc biệt trong Laravel, chỉ đảm nhận đúng 1 hàm tính năng xử lý yêu cầu từ người dùng. Tất cả xử lý được đặt bên trong hàm __invoke(). Cú pháp như sau: Route::get('user/{id}', 'UserController@show'); Route::get('ROUTE_ADDRESS', 'FOLDER_NAME/CONTROLLER_CLASS_NAME@FUNCTION_NAME'); <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class NAMEController extends Controller{ public function __invoke(){
//TODO: Write your code here }
Middleware được khai báo trong định nghĩa địa chỉ trong route, tuy nhiên middleware vẫn có thể được khai báo trong constructor của controller. Ví dụ: