Laravel

Memahami Struktur Folder dan Direktori di Framework Laravel

06 Jun 2026 Administrator
Header Hero

Memahami Struktur Folder dan Direktori di Framework Laravel

Panduan Arsitektur Standarisasi MVC, Penempatan Komponen Logika, Aset Frontend, dan Manajemen Server

Salah satu faktor utama yang membuat framework Laravel sangat populer di kalangan pengembang web profesional adalah standarisasi struktur foldernya yang sangat rapi dan terorganisir. Berbeda dengan pengembangan web berbasis PHP konvensional di mana pengembang bebas meletakkan file secara acak, Laravel menerapkan konvensi arsitektur Model-View-Controller (MVC) yang ketat secara native. Pola ini mengisolasi setiap komponen kode program berdasarkan fungsi spesifiknya, menjamin aplikasi tetap mudah dirawat (*maintainable*) dan dikembangkan (*scalable*).

Bagi pemula, melihat tumpukan folder saat pertama kali menginstal proyek Laravel baru mungkin akan terasa membingungkan. Namun, setiap direktori tersebut dirancang dengan tujuan khusus, mulai dari penyimpanan logika inti backend, pemrosesan kueri pangkalan data, hingga kompilasi aset frontend. Memahami peta penempatan file ini merupakan langkah krusial untuk mempercepat alur kerja (*workflow*) pengembangan harian Anda di dalam ekosistem Laravel.

Prinsip Konvensi: Aturan baku di Laravel adalah "Convention over Configuration". Dengan mematuhi lokasi standardisasi folder bawaan, core engine Laravel akan melakukan pemuatan kelas secara otomatis (*autoloading*) tanpa memerlukan konfigurasi manual yang rumit.

1. Ikhtisar Struktur Direktori Utama (Root Level)

Saat Anda melakukan instalasi proyek baru, berikut adalah struktur folder utama yang berada di tingkat root aplikasi:

nama-proyek-laravel/
├── app/          # Jantung aplikasi (Controller, Models, Middleware)
├── bootstrap/    # Skrip inisialisasi sistem & cache framework
├── config/       # Kumpulan berkas konfigurasi global PHP
├── database/     # Komponen pangkalan data (Migrations, Seeders, Factories)
├── public/       # Root web server (Aset CSS/JS publik, index.php)
├── resources/    # File mentah frontend (Blade Views, raw CSS/JS, bahasa)
├── routes/       # Manajemen perutean URL (Jalur Web & API)
├── storage/      # File internal (Logs, Session, cache, unggahan user)
└── tests/        # Unit testing otomatis aplikasi

2. Bedah Detail Fungsi Setiap Folder Inti

Folder app/

Merupakan wadah utama dari seluruh logika bisnis backend aplikasi Anda. Di dalam folder ini terdapat beberapa sub-direktori vital:

  • app/Http/Controllers/: Menyimpan berkas Controller yang berfungsi menerima HTTP request dari rute dan memberikan HTTP response (mengembalikan view atau data JSON).
  • app/Models/: Rumah bagi kelas-kelas Eloquent Model yang merepresentasikan dan mengelola tabel pangkalan data secara objektif.
  • app/Http/Middleware/: Berisi filter penyaring lalu lintas HTTP request, misalnya memeriksa apakah pengguna sudah login sebelum bisa mengakses halaman tertentu.
  • app/Providers/: Berisi Service Providers yang bertugas melakukan *bootstrapping* layanan internal framework serta mengikat komponen ke dalam *Service Container*.

Folder database/

Mengelola arsitektur pangkalan data secara terprogram tanpa perlu menyentuh antarmuka GUI database manager:

  • database/migrations/: Berkas skrip pembentuk tabel (*version control database*) untuk membangun skema tabel SQL secara otomatis.
  • database/seeders/: Menyimpan data statis produksi atau data awal sistem (seperti daftar wilayah atau akun admin utama).
  • database/factories/: Berkas cetak biru untuk menghasilkan ribuan data dummy acak (*fake data generator*) demi kebutuhan pengujian aplikasi.

Folder public/ & resources/

Kedua folder ini bekerja sama dalam menyajikan antarmuka visual pengguna, namun memiliki hak akses keamanan yang berbeda:

  • public/: Direktori root yang diakses langsung oleh web server (Nginx/Apache). Berisi file pemicu utama index.php serta aset siap pakai seperti gambar, file CSS terkompilasi, dan Javascript eksternal.
  • resources/views/: Berisi file templat visual berformat **Laravel Blade** (.blade.php) yang menyusun kerangka HTML dinamis halaman web Anda.

Folder routes/

Menyimpan seluruh manifestasi pemetaan URL aplikasi Anda. File utama di dalamnya meliputi:

  • routes/web.php: Tempat mendaftarkan rute web umum. Semua URL di sini otomatis dimuati status session, enkripsi kuki, dan proteksi keamanan dari serangan *CSRF*.
  • routes/api.php: Tempat mendaftarkan endpoint API. Rute di sini bersifat *stateless* (tanpa session) dan dibatasi oleh filter keamanan token (seperti Laravel Sanctum).
Praktik Terbaik

Struktur Modifikasi Mandiri untuk Aplikasi Skala Besar

Meskipun Laravel menyediakan folder bawaan, arsitektur ini sangat fleksibel. Saat aplikasi Anda berkembang menjadi sangat besar (*Enterprise Project*), disarankan membuat folder custom baru di dalam direktori app/ untuk memisahkan tanggung jawab kode agar tidak menumpuk di file Controller:

app/
├── Http/
├── Models/
├── Services/      # FOLDER CUSTOM: Tempat mengisolasi logika bisnis pihak ketiga (misal: API payment gateway)
├── Repositories/  # FOLDER CUSTOM: Penampung kueri SQL kompleks agar terpisah dari model utama
└── Traits/        # FOLDER CUSTOM: Menyimpan sekumpulan fungsi PHP yang bisa digunakan lintas class
Pedoman Pengelolaan Struktur Folder Server Produksi

Penerapan manajemen folder yang salah saat melakukan hosting dapat mengakibatkan kebocoran data sensitif. Patuhi aturan operasional server berikut:

  • Arahkan Dokumen Root Server ke Folder public/: Saat mengonfigurasi web server vhost (Nginx, Apache, atau aaPanel), pastikan direktori root diarahkan ke folder public/, **BUKAN** ke root proyek utama. Ini mengunci folder sensitif seperti app/ atau berkas .env agar tidak bisa diintip langsung lewat URL browser oleh peretas.
  • Berikan Hak Akses Tulis pada Folder storage/ dan bootstrap/cache/: Sistem inti Laravel memerlukan otorisasi untuk menulis file log operasional harian, sesi enkripsi, dan cache templat. Jalankan perintah terminal berikut pada server VPS Anda agar aplikasi tidak mengalami error *Permission Denied*:
    sudo chmod -R 775 storage bootstrap/cache
  • Jangan Pernah Menghapus Folder storage/app/public/: Folder ini merupakan tautan langsung (*symbolic link*) untuk menyajikan berkas unggahan user (seperti foto profil atau dokumen) menuju folder publik. Buat tautan ini di server baru menggunakan perintah CLI:
    php artisan storage:link
v