Laravel 11 Folder Structure: Hướng Dẫn Chi Tiết Cấu Trúc Thư Mục Mới

VMas-Dev-KA

Laravel 11 Folder Structure: Hướng dẫn làm chủ cấu trúc thư mục tối giản

Nếu bạn vừa cài đặt một dự án Laravel 11 mới, đừng hoảng hốt khi mở thư mục app/Http và thấy nó… trống trơn. Không còn Kernel.php, không còn thư mục Middleware, và thậm chí là file config cũng biến mất gần hết.

Laravel 11 mang đến triết lý “Slim Skeleton” (Bộ khung siêu mỏng). Mục tiêu của đội ngũ phát triển là loại bỏ mọi boilerplate code không cần thiết để bạn có thể tập trung vào logic ứng dụng ngay lập tức.

Trong bài viết này, chúng ta sẽ cùng “đi tìm” những thứ đã bị ẩn đi và cách để làm chủ Laravel 11 folder structure một cách chuyên nghiệp.


1. Tư duy tối giản: Tại sao Laravel 11 lại bỏ bớt file?

Trong các phiên bản trước, Laravel cung cấp sẵn rất nhiều file để người dùng dễ tiếp cận. Tuy nhiên, với các dự án lớn, việc có hàng chục file config hay hàng loạt Middleware mặc định lại gây ra cảm giác cồng kềnh.

Laravel 11 chuyển hướng theo phong cách “Opt-in” (Chỉ thêm vào khi cần). Nếu ứng dụng của bạn đơn giản, bạn sẽ có một bộ khung cực kỳ gọn nhẹ. Khi cần can thiệp sâu, Laravel cung cấp các lệnh Artisan để bạn “gọi” các file đó quay trở lại.

Lưu ý quan trọng: Laravel 11 yêu cầu tối thiểu PHP 8.2. Nếu server của bạn đang chạy PHP 8.1, bạn buộc phải nâng cấp trước khi cài đặt.


2. Những thay đổi quan trọng trong cấu trúc thư mục

2.1. File bootstrap/app.php: Trái tim mới của ứng dụng

Đây là thay đổi lớn nhất. Trước đây, cấu trúc Laravel được phân tán ở Kernel.php và các ServiceProviders. Giờ đây, tất cả quy về một mối tại file bootstrap/app.php. Mọi thiết lập về Routing, Middleware, và Exception Handling đều nằm tại đây.

Bảng Mapping: Laravel 10 vs Laravel 11

Để giúp bạn không bị “lạc đường”, hãy tham khảo bảng đối chiếu các thành phần quan trọng dưới đây:

Bảng Mapping Laravel 10 vs Laravel 11


2.2. Cách đăng ký Middleware và Exception

Kernel.php đã biến mất, bạn sẽ cấu hình Middleware thông qua closure trong bootstrap/app.php.

Ví dụ: Đăng ký Global Middleware và Alias

// File: bootstrap/app.php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        // 1. Đăng ký Global Middleware (Chạy cho mọi request)
        $middleware->append(App\Http\Middleware\CheckSystemStatus::class);

        // 2. Đấu hình Alias (Thay thế cho $middlewareAliases cũ)
        $middleware->alias([
            'admin' => App\Http\Middleware\AdminAccess::class,
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        // Cấu hình xử lý lỗi tập trung tại đây
    })->create();

3. “Kích hoạt” các thành phần bị ẩn (API & Config)

3.1. Thiết lập Route API (Không còn mặc định)

Laravel 11 mặc định không có file routes/api.php và không cài sẵn Sanctum. Để thêm tính năng API, bạn cần chạy lệnh:

php artisan install:api

Lệnh này sẽ tự động:

  1. Tạo file routes/api.php.
  2. Tạo file migration cho cá nhân hóa token (Sanctum).
  3. Cập nhật bootstrap/app.php để nhận diện các route API.

3.2. Cách lấy lại các file Config

Thư mục config giờ đây chỉ chứa những file tối thiểu. Nếu bạn cần đổi Timezone (app.php) hay cấu hình Database nâng cao, hãy dùng lệnh:

# Đưa một file cụ thể ra ngoài (Khuyên dùng)
php artisan config:publish app

# Hoặc đưa toàn bộ file config ra ngoài để giống bản cũ
php artisan config:publish

4. Lỗi thường gặp và Best Practices

Lỗi: “Làm sao để tạo lại thư mục Middleware?”

Mặc định thư mục này không tồn tại. Tuy nhiên, khi bạn chạy lệnh tạo middleware: php artisan make:middleware MyCustomMiddleware Laravel sẽ tự động tạo thư mục app/Http/Middleware cho bạn.

Best Practices:

  1. Tận dụng AppServiceProvider: Vì các Provider khác đã bị lược bỏ, hãy dùng AppServiceProvider.php để đăng ký các Service Binding, Gates, hoặc Macro.
  2. Hạn chế Publish toàn bộ Config: Chỉ nên publish những file bạn thực sự cần thay đổi để giữ cho cấu trúc thư mục luôn “sạch” đúng tinh thần Laravel 11.
  3. Sử dụng Health Check: Route /up mới rất hữu ích cho các hệ thống Monitor (như UptimeRobot) để kiểm tra tình trạng sống còn của ứng dụng.

Kết luận

Laravel 11 folder structure không chỉ là một sự thay đổi về thẩm mỹ, mà là một bước tiến về tư duy phát triển: Tối giản nhưng mạnh mẽ. Việc gom mọi thứ vào bootstrap/app.php giúp bạn kiểm soát luồng xử lý của ứng dụng tại một nơi duy nhất.

Đừng lo lắng về những file đã mất, hãy tận hưởng tốc độ và sự thanh thoát mà “Slim Skeleton” mang lại!


FAQ (Câu hỏi thường gặp)

Câu 1: Laravel 11 có hỗ trợ PHP 8.1 không? Không. Bạn bắt buộc phải sử dụng PHP 8.2 trở lên.

Câu 2: Các Service Provider cũ đi đâu rồi? Hầu hết đã được tích hợp vào nhân Framework. Nếu bạn cần logic khởi tạo, hãy dùng app/Providers/AppServiceProvider.php.

Câu 3: Làm sao để cài đặt tính năng Broadcasting? Tương tự API, bạn cần chạy lệnh: php artisan install:broadcasting.

Chia sẻ bài viết này