Struktur direktori
Struktur Laravel sengaja seragam di semua proyek. Kekuatannya bukan pada folder-foldernya, tapi pada fakta bahwa setiap developer Laravel langsung tahu harus mencari ke mana.
Intisari
app/tempat kodemu;routes/pintu masuknya;config/setelannya;database/skema dan datanya.public/adalah satu-satunya folder yang boleh diakses web. Sisanya harus tidak terjangkau.storage/danbootstrap/cache/harus bisa ditulis โ dua folder ini penyebab error izin paling sering.- Sejak Laravel 11, banyak folder lama (
Http/Middleware,Console/Kernel.php) sudah tidak dibuat default โ konfigurasinya pindah kebootstrap/app.php. - Kamu bebas menambah folder sendiri di
app/; selama namespace-nya cocok, autoload langsung menemukannya.
Peta yang perlu kamu hafal
toko/
โโโ app/
โ โโโ Http/Controllers/ # controller
โ โโโ Models/ # model Eloquent
โ โโโ Providers/ # service provider
โ โโโ โฆ # folder buatanmu sendiri masuk sini
โโโ bootstrap/
โ โโโ app.php # โ pusat konfigurasi aplikasi sejak Laravel 11
โ โโโ cache/ # HARUS bisa ditulis
โโโ config/ # file konfigurasi
โโโ database/
โ โโโ migrations/ # perubahan skema, berurutan
โ โโโ factories/ # pembuat data palsu untuk tes
โ โโโ seeders/ # data awal
โโโ public/ # โ DOCUMENT ROOT. index.php, aset terkompilasi
โโโ resources/
โ โโโ views/ # template Blade
โ โโโ css/ js/ # sumber aset, dikompilasi Vite
โโโ routes/
โ โโโ web.php # rute berbasis session
โ โโโ console.php # perintah & jadwal
โโโ storage/ # log, cache, file unggahan โ HARUS bisa ditulis
โโโ tests/
โโโ vendor/ # milik Composer, jangan disentuh
bootstrap/app.php โ file terpenting yang jarang disebut
Sejak Laravel 11, kerangka aplikasi dirampingkan besar-besaran. app/Http/Kernel.php dan
app/Console/Kernel.php tidak lagi ada; pengaturannya pindah ke satu file:
// bootstrap/app.php
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up', // endpoint health check โ dipakai di Fase 9
)
->withMiddleware(function (Middleware $middleware) {
$middleware->append(EnsureTenant::class);
})
->withExceptions(function (Exceptions $exceptions) {
$exceptions->dontReport(PaymentDeclined::class);
})
->create();
Ini sumber kebingungan terbesar saat mengikuti tutorial lama. Panduan untuk Laravel 10 ke bawah akan
menyuruhmu "buka app/Http/Kernel.php dan daftarkan middleware di sana". File itu tidak ada lagi.
Padanannya adalah ->withMiddleware(...) di bootstrap/app.php. Kalau sebuah tutorial
menyebut file yang tidak kamu punya, cek dulu versi Laravel yang ditulisnya.
Dua folder yang harus bisa ditulis
| Folder | Isinya | Kalau tidak bisa ditulis |
|---|---|---|
storage/ | Log, cache file, session, view terkompilasi, unggahan | Halaman 500 tanpa penjelasan โ karena log-nya pun gagal ditulis |
bootstrap/cache/ | Cache konfigurasi, rute, dan paket | php artisan config:cache gagal saat deploy |
Di kontainer, ini artinya kedua folder harus dimiliki user yang menjalankan PHP. Di Fase 9 hal ini muncul lagi
sebagai satu baris chown di Dockerfile โ dan sebagai keputusan untuk memindahkan cache serta session
ke Redis supaya kontainernya benar-benar stateless.
Menambah struktur sendiri
Laravel tidak memaksamu berhenti di Models dan Controllers. Folder baru langsung dikenali
selama namespace-nya mengikuti, tanpa mendaftarkan apa pun:
app/
โโโ Actions/ App\Actions\โฆ satu kelas satu perbuatan
โโโ Data/ App\Data\โฆ DTO
โโโ Services/ App\Services\โฆ logika lintas model
โโโ Support/ App\Support\โฆ utilitas
โโโ Policies/ App\Policies\โฆ aturan otorisasi
Godaan yang perlu ditahan di awal: membangun lapisan repository, service, dan interface untuk aplikasi yang belum punya pengguna. Konvensi Laravel sudah cukup untuk sangat jauh. Fase 10 membahas kapan pemisahan modular benar-benar terbayar โ dan kapan ia cuma menambah file tanpa menambah kejelasan.
Yang tidak boleh ikut ke git
| Jangan di-commit | Alasan |
|---|---|
.env | Berisi kredensial dan APP_KEY |
vendor/ | Hasil composer install, bisa dibangun ulang persis dari lock |
node_modules/ | Sama, dari package-lock.json |
public/build/ | Hasil Vite โ dibangun di pipeline, bukan di laptop |
storage/logs/* | Berbeda di tiap mesin, kadang berisi data pengguna |
Latihan: buka bootstrap/app.php proyekmu dan temukan tiga hal: di mana file rute
didaftarkan, di mana middleware ditambahkan, dan apakah endpoint health aktif. Lalu buat folder
app/Support berisi satu kelas dan panggil dari routes/web.php โ tanpa menyentuh
composer.json.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.