Setiap perintah make: yang kita jalankan lewat Artisan menaruh berkas baru di lokasi yang sudah ditentukan, dan membaca kode orang lain juga menuntut kita tahu harus mencari ke mana. Untungnya, semua proyek Laravel memakai kerangka direktori yang sama sehingga sekali paham, kita bisa menemukan arah di proyek Laravel mana pun. Pada chapter penutup Section ini kita akan memetakan direktori-direktori utama hasil instalasi segar — mengikuti penjelasan struktur direktori
pada dokumentasi resmi — termasuk perubahan penting pada struktur sejak Laravel 11.
Peta Direktori Hasil Instalasi #
Berikut isi direktori akar sebuah proyek Laravel 13 yang baru dibuat, diambil dari aplikasi uji Course ini:
ls -A example-appOutput yang Dihasilkan:
.editorconfig
.env
.env.example
.gitattributes
.gitignore
.npmrc
AGENTS.md
CLAUDE.md
README.md
app
artisan
bootstrap
composer.json
composer.lock
config
database
package.json
phpunit.xml
public
resources
routes
storage
tests
vendor
vite.config.jsOutput di atas adalah isi nyata aplikasi uji, termasuk berkas AGENTS.md dan CLAUDE.md yang disertakan skeleton sebagai panduan bagi asisten AI. Selain berkas konfigurasi seperti .env dan composer.json yang sudah kita bahas, terdapat sembilan direktori dengan peran masing-masing:
| Direktori | Isi |
|---|---|
app/ | Kode aplikasi kita: controller, model, provider |
bootstrap/ | Titik bootstrap framework dan cache-nya |
config/ | Seluruh berkas konfigurasi aplikasi |
database/ | Migrasi, seeder, factory, dan berkas SQLite |
public/ | Docroot: index.php dan aset publik |
resources/ | View Blade dan aset frontend mentah |
routes/ | Definisi route HTTP dan console |
storage/ | Log, cache, session, berkas yang dihasilkan aplikasi |
tests/ | Test otomatis, terbagi Feature/ dan Unit/ |
Direktori app #
Direktori app/ adalah rumah kode yang kita tulis. Pada instalasi segar isinya sangat ramping: app/Http/Controllers/Controller.php sebagai kelas induk controller, app/Models/User.php sebagai model pertama, dan app/Providers/AppServiceProvider.php. Subdirektori baru akan bertambah seiring kita menjalankan perintah make: — misalnya app/Http/Middleware setelah make:middleware atau app/Console/Commands setelah make:command untuk kelas perintah penuh.
Sejak Laravel 11, struktur app/ jauh lebih langsing dibanding Laravel 10 ke bawah: tidak ada lagi app/Http/Kernel.php maupun register middleware di app/Http/Middleware/Kernel.php. Konfigurasi yang dulu tersebar di berbagai berkas tersebut kini terpusat di satu tempat, bootstrap/app.php, yang isinya pada instalasi segar terlihat seperti ini:
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware): void {
//
})
->withExceptions(function (Exceptions $exceptions): void {
$exceptions->shouldRenderJsonWhen(
fn (Request $request) => $request->is('api/*') || $request->expectsJson(),
);
})->create();Berkas inilah titik awal hidup setiap request: method withRouting mendaftarkan berkas route, withMiddleware tempat kita menambahkan middleware global maupun grup, dan withExceptions mengatur penanganan exception. Subdirektori bootstrap/cache/ menyimpan berkas cache framework seperti config dan route hasil php artisan config:cache.
config, database, dan resources #
Direktori config/ berisi sembilan berkas PHP yang masing-masing mengembalikan array konfigurasi — app.php, database.php, session.php, dan seterusnya — seluruhnya membaca nilai dari .env lewat env() seperti yang kita praktikkan di chapter Konfigurasi Environment. Direktori database/ memuat migrations/ berisi tiga migrasi bawaan, seeders/ dengan DatabaseSeeder.php, factories/ dengan UserFactory.php, serta berkas database.sqlite kita. Adapun resources/ menyimpan views/welcome.blade.php — view Blade halaman selamat datang — di samping css/ dan js/ yang dikompilasi Vite; inilah tempat seluruh tampilan aplikasi kita nanti.
routes, public, storage, dan tests #
Dua berkas di routes/ sudah kita temui: web.php untuk route HTTP dan console.php untuk perintah Artisan berbasis closure. Direktori public/ adalah satu-satunya yang menghadap web server di produksi — index.php di dalamnya adalah pintu masuk semua request, dan public/storage nantinya menjadi symlink ke storage/app/public hasil php artisan storage:link. Direktori storage/ terbagi menjadi app/ untuk berkas yang dihasilkan aplikasi, framework/ untuk cache dan session, dan logs/ untuk laravel.log. Terakhir, tests/ berisi Feature/ untuk test lewat HTTP semu dan Unit/ untuk test kelas terisolasi, dengan TestCase.php sebagai induknya.
Dengan peta ini di tangan, seluruh persiapan lingkungan kerja kita tuntas: PHP, Composer, proyek, database, konfigurasi, server, Artisan, dan struktur direktori. Section berikutnya mengajak kita masuk ke jantung aplikasi: bagaimana sebuah URL diterima Laravel dan diarahkan ke kode yang tepat lewat routing.