โ† Semua pembelajaran / Laravel Nol โ†’ Enterprise
Fase 0 ยท Fondasi PHP & Tooling

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.

Sumber asli laravel.com Resmi Rangkuman ~6 menit baca

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/ dan bootstrap/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 ke bootstrap/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

FolderIsinyaKalau tidak bisa ditulis
storage/Log, cache file, session, view terkompilasi, unggahanHalaman 500 tanpa penjelasan โ€” karena log-nya pun gagal ditulis
bootstrap/cache/Cache konfigurasi, rute, dan paketphp 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-commitAlasan
.envBerisi 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.