Bản đồ thư mục
app/: code của bạn. Mặc định chỉ cóHttp/Controllers,ModelsvàProviders. Các thư mục khác (Jobs, Events, Policies...) tự xuất hiện khi bạn tạo bằng lệnh make.bootstrap/app.php: nơi cấu hình routing, middleware và xử lý lỗi.config/: file cấu hình, đọc giá trị từ.env.database/: migration, seeder, factory và filedatabase.sqlite.public/: thư mục web công khai;public/index.phplà cửa vào của mọi request.resources/: view Blade, CSS, JS.routes/:web.php(route trang web) vàconsole.php(lệnh và lịch chạy).storage/: log, cache, file tải lên.tests/: test Pest.vendor/: thư viện Composer, không sửa tay.
So với Next.js: routes/web.php thay cho việc tạo file trong app router; controller thay cho route handler hay server action; resources/views là phần giao diện.
Một request đi qua những đâu?
- Trình duyệt gọi tới
public/index.php. bootstrap/app.phpdựng ứng dụng.- Request đi qua middleware (giống middleware trong Next.js): kiểm tra phiên đăng nhập, CSRF...
- Router tìm route khớp trong
routes/web.php. - Controller xử lý, trả về view, JSON hoặc redirect.
- Response đi ngược qua middleware rồi trả về trình duyệt. Xong request, mọi thứ được dọn sạch.
File bootstrap/app.php trong Laravel 13:
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware): void {
// đăng ký middleware ở đây
})
->withExceptions(function (Exceptions $exceptions): void {
// tùy chỉnh xử lý lỗi ở đây
})->create();
Codebase Laravel 10 trở về trước không có file này mà dùng
app/Http/Kernel.phpvàapp/Console/Kernel.php. Gặp dự án cũ, hãy tìm middleware ở đó.
.env và config
.envchứa giá trị riêng của từng máy (mật khẩu database, khóa API), không commit lên git;.env.examplelà bản mẫu.- Chỉ gọi
env()bên trong thư mụcconfig/. Ở mọi chỗ khác dùngconfig('app.name'). Lý do: khi chạyphp artisan config:cachetrên server, file .env không còn được đọc nữa.
Artisan: trợ lý dòng lệnh
php artisan list: xem mọi lệnh.php artisan make:controller,make:model...: tạo file đúng chỗ, đúng mẫu.php artisan route:list: xem toàn bộ route.php artisan tinker: REPL để chạy thử code PHP với dữ liệu thật, giống mở node trong terminal.php artisan about: tóm tắt cấu hình ứng dụng.
Bài tập
- Mở
bootstrap/app.phpvà giải thích mỗi phần bằng lời của bạn. - Chạy
php artisan route:list: route /up là gì? (gợi ý: health check cho server). - Mở tinker và chạy
App\Models\User::count(). - Thêm
APP_NAME="Hoc Laravel"vào .env, rồi trong tinker chạyconfig('app.name').
Xem thêm
- Bài 5: Vòng đời Request Lifecycle trong Laravel 12 (kênh Học Lập Trình 96, tiếng Việt, 7 phút)