# 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.

![](https://images.viblo.asia/9383df2b-3ea8-4b41-96a0-6ed9d604aa07.JPG)

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.
