2. Controller & Namespace

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:

namespace App\Http\Controllers\Admin;

public function show()
{
    return 'Setting admin';
}

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:

Route::get('/admin/setting', 'Admin\SettingController@show');

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.

Last updated