2. Controller & Namespace
Last updated
Last updated
Như đã nói ở những tập trước, khi đăng ký một controller trong route thì RouteServiceProvider
sẽ tự động load base namespace App\Http\Controllers
cho mỗi controller. Đó là lý do vì sao khi nãy đăng ký HomeController
trong route, ta không cần phải viết namespace App\Http\Controllers
.
Trong trường hợp có quá nhiều controller trong một ứng dụng, bạn muốn phân nhóm chúng trong từng thư mục con. Chẳng hạn mình muốn các controller xử lý phía admin-side sẽ nằm trong thư mục Admin
. Đầu tiên thì trong app/Http/Controllers
ta chưa có thư mục Admin
nào cả, nhưng điều này không có nghĩa là bạn phải tạo nó bằng cách thủ công. Thay vào đó bạn sẽ tạo một controller đầu tiên xử lý admin-side với lệnh Artisan như sau:
php artisan make:controller Admin/SettingController
Rồi, giờ bạn thử kiểm tra xem, thư mục Admin
đã tự động tạo ra, bên trong có chứa file SettingController.php
luôn.
Các bạn mở Admin\SettingController
lên và sẽ thấy namespace của file này đã thêm \Admin
vào sau cùng, có nghĩa là Laravel đã tự động điều chỉnh namespace khi tạo các deep controller (tức là các controller nằm trong sub-directory). Rồi, giờ các bạn đăng ký method sau:
Tiếp theo là phần quan trọng, đó là làm cách nào để đăng ký controller vừa tạo trong route. Các bạn quan sát cách đăng ký route bên dưới:
Chúng ta chỉ cần thêm namespace Admin
đằng trước tên class controller thôi. Vì trước đó RouteServiceProvider
đã load cho chúng ta namespace App\Http\Controllers
rồi. Rất đơn giản phải không nào.