Salah satu hal penting yang perlu dipahami oleh pemula dalam belajar framework Laravel adalah struktur folder project. Ketika pertama kali membuka project Laravel, kita akan menemukan berbagai folder dan file dengan fungsi yang berbeda-beda. Jika belum terbiasa dengan Laravel, struktur tersebut mungkin terlihat cukup membingungkan.
Padahal, setiap bagian dari struktur project Laravel memiliki tujuan tertentu. Folder seperti app, routes, resources, database, dan storage digunakan untuk kebutuhan yang berbeda dalam proses pengembangan aplikasi.
Memahami struktur folder Laravel akan membantu developer mengetahui di mana harus meletakkan controller, model, route, view, migration, file konfigurasi, hingga file hasil generate framework. Pemahaman ini juga menjadi dasar penting sebelum mempelajari fitur Laravel yang lebih lanjut seperti Eloquent, authentication, API, dan Livewire.
Dalam artikel ini, kita akan membahas struktur folder Laravel dan fungsinya berdasarkan dokumentasi resmi Laravel 13.x terbaru. Pembahasan mencakup struktur direktori utama project Laravel serta folder-folder yang terdapat di dalam direktori app.
Mengenal Struktur Project Laravel
Ketika membuat aplikasi Laravel baru, Laravel menyediakan struktur project yang dirancang sebagai titik awal untuk aplikasi berukuran kecil maupun besar. Struktur tersebut memberikan tempat yang jelas untuk berbagai bagian aplikasi.
Laravel juga tidak terlalu membatasi developer dalam menentukan lokasi class. Selama class tersebut dapat di-autoload oleh Composer, developer memiliki kebebasan untuk mengatur struktur aplikasi sesuai kebutuhan.
Namun, menggunakan struktur bawaan Laravel tetap sangat disarankan, terutama ketika baru belajar. Dengan mengikuti struktur standar, developer akan lebih mudah memahami dokumentasi Laravel dan bekerja dengan developer lain.
Secara umum, project Laravel memiliki struktur seperti berikut:
example-app/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── tests/
├── vendor/
├── .env
├── .gitignore
├── artisan
├── composer.json
├── composer.lock
├── package.json
├── phpunit.xml
└── vite.config.js
Daftar file dapat berbeda tergantung versi Laravel, konfigurasi project, package yang digunakan, serta fitur yang sudah dipasang. Oleh karena itu, struktur di atas sebaiknya digunakan sebagai gambaran umum, bukan sebagai daftar file yang harus selalu identik pada setiap project.
1. Folder app
Folder app merupakan salah satu folder paling penting dalam project Laravel. Dokumentasi resmi Laravel menjelaskan bahwa folder ini berisi core code dari aplikasi.
Sebagian besar class yang dibuat untuk kebutuhan aplikasi akan berada di dalam folder app. Secara default, folder ini menggunakan namespace App dan di-autoload oleh Composer menggunakan standar PSR-4.
Pada aplikasi Laravel baru, folder app secara default berisi beberapa direktori utama, yaitu:
app/
├── Http/
├── Models/
└── Providers/
Folder lain seperti Console, Events, Jobs, Mail, atau Notifications dapat muncul ketika developer membuat class tertentu menggunakan Artisan.
Dengan kata lain, jangan heran apabila sebuah project Laravel baru tidak langsung memiliki semua folder tersebut.
Folder app/Http
Folder app/Http berisi berbagai class yang berhubungan dengan HTTP request. Dokumentasi resmi Laravel menyebutkan bahwa folder ini menampung controllers, middleware, dan form requests.
Secara umum, Anda akan sering bekerja dengan struktur seperti:
app/
└── Http/
├── Controllers/
├── Middleware/
└── Requests/
Controller digunakan untuk menangani request dan menentukan tindakan yang perlu dilakukan oleh aplikasi. Middleware digunakan untuk memeriksa atau memproses request sebelum request tersebut diteruskan ke bagian aplikasi berikutnya.
Sementara itu, form request dapat digunakan untuk mengenkapsulasi proses validasi dan authorization request.
Folder app/Http/Controllers
Folder app/Http/Controllers digunakan untuk menyimpan controller aplikasi. Dokumentasi Laravel menyebutkan bahwa controller secara default disimpan di lokasi ini.
Contohnya, Anda dapat membuat controller menggunakan Artisan:
php artisan make:controller UserController
Setelah command tersebut dijalankan, Laravel akan membuat class controller pada:
app/Http/Controllers/UserController.php
Controller biasanya digunakan sebagai penghubung antara route dengan bagian aplikasi lainnya. Misalnya, route menerima request untuk halaman daftar pengguna, kemudian controller memproses request tersebut dan mengambil data yang diperlukan.
Folder app/Http/Middleware
Folder app/Http/Middleware digunakan untuk menyimpan middleware aplikasi.
Middleware dapat digunakan untuk memeriksa request sebelum request mencapai controller. Contohnya adalah middleware yang memastikan pengguna sudah terautentikasi sebelum dapat mengakses halaman tertentu.
Middleware juga dapat digunakan untuk berbagai kebutuhan seperti authorization, pemeriksaan request, logging, atau kebutuhan lain yang harus dilakukan sebelum atau sesudah request diproses.
Folder app/Http/Requests
Folder app/Http/Requests digunakan untuk menyimpan form request class.
Form request berguna ketika proses validasi request mulai kompleks dan sebaiknya dipisahkan dari controller. Dengan pendekatan tersebut, controller dapat tetap lebih sederhana karena aturan validasi ditempatkan pada class tersendiri.
2. Folder app/Models
Folder app/Models digunakan untuk menyimpan model Eloquent aplikasi.
Eloquent merupakan ORM bawaan Laravel yang menyediakan pendekatan sederhana untuk berinteraksi dengan database. Model biasanya digunakan untuk merepresentasikan data yang terdapat pada database.
Misalnya, jika aplikasi memiliki tabel users, aplikasi biasanya memiliki model User yang digunakan untuk berinteraksi dengan data pengguna.
Contoh struktur:
app/
└── Models/
├── User.php
└── Product.php
Model dapat digunakan untuk melakukan operasi database, mendefinisikan relationship, mengatur attribute, dan berbagai kebutuhan lain yang berkaitan dengan Eloquent.
Untuk membuat model menggunakan Artisan, Anda dapat menjalankan:
php artisan make:model Product
Laravel kemudian akan membuat model pada:
app/Models/Product.php
3. Folder app/Providers
Folder app/Providers berisi service providers aplikasi.
Service provider merupakan salah satu bagian penting dalam proses bootstrap aplikasi Laravel. Provider digunakan untuk mendaftarkan atau menyiapkan berbagai service aplikasi.
Dokumentasi resmi Laravel menjelaskan bahwa service provider merupakan tempat utama untuk melakukan application bootstrapping. Provider dapat digunakan untuk melakukan binding ke service container, mendaftarkan event, dan berbagai konfigurasi lain yang diperlukan ketika aplikasi dijalankan.
Pada project Laravel baru, Anda akan menemukan:
app/
└── Providers/
└── AppServiceProvider.php
Jika aplikasi membutuhkan service provider tambahan, developer dapat membuat dan menambahkannya sesuai kebutuhan.
Laravel terbaru juga menggunakan file bootstrap/providers.php untuk mendaftarkan provider aplikasi.
4. Folder app/Console
Folder app/Console digunakan untuk menyimpan custom Artisan commands.
Namun, folder ini tidak selalu tersedia ketika project Laravel baru pertama kali dibuat. Folder tersebut akan dibuat ketika Anda membuat custom command menggunakan Artisan.
Contohnya:
php artisan make:command SendNewsletter
Command yang dibuat akan berada di dalam folder app/Console.
Artisan command berguna ketika Anda ingin membuat perintah khusus yang dapat dijalankan melalui terminal. Misalnya, command untuk melakukan proses import data, mengirim laporan, membersihkan data, atau menjalankan proses tertentu secara manual maupun terjadwal.
5. Folder app/Events
Folder app/Events digunakan untuk menyimpan event class aplikasi.
Folder ini tidak dibuat secara default dan akan muncul ketika Anda membuat event menggunakan Artisan.
Contohnya:
php artisan make:event UserRegistered
Event digunakan untuk memberi tahu bagian lain dari aplikasi bahwa suatu kejadian telah terjadi. Pendekatan event dapat membantu membuat aplikasi menjadi lebih fleksibel dan mengurangi ketergantungan langsung antarbagian aplikasi.
Sebagai contoh, setelah pengguna melakukan registrasi, aplikasi dapat memicu event UserRegistered. Event tersebut kemudian dapat ditangani oleh listener untuk menjalankan proses lain.
6. Folder app/Exceptions
Folder app/Exceptions digunakan untuk menyimpan custom exception class.
Folder ini juga tidak selalu tersedia pada project baru. Anda dapat membuat exception menggunakan:
php artisan make:exception PaymentFailedException
Custom exception dapat digunakan untuk merepresentasikan kondisi error tertentu pada aplikasi dengan cara yang lebih terstruktur.
7. Folder app/Jobs
Folder app/Jobs digunakan untuk menyimpan queueable jobs.
Folder ini dibuat ketika Anda membuat job menggunakan Artisan:
php artisan make:job ProcessOrder
Job dapat dijalankan melalui queue atau secara synchronous sesuai kebutuhan aplikasi. Queue sangat berguna untuk memindahkan pekerjaan yang membutuhkan waktu lama ke proses background sehingga request pengguna tidak harus menunggu seluruh proses selesai.
Contoh pekerjaan yang cocok dijadikan job antara lain mengirim email, memproses file berukuran besar, melakukan sinkronisasi data, atau menjalankan proses tertentu yang membutuhkan waktu cukup lama.
8. Folder app/Listeners
Folder app/Listeners digunakan untuk menyimpan event listeners.
Listener merupakan class yang menangani event tertentu. Ketika sebuah event dijalankan, listener yang terhubung dengan event tersebut dapat melakukan tindakan tertentu.
Contohnya, aplikasi memiliki event UserRegistered. Listener dapat digunakan untuk mengirim email selamat datang setelah event tersebut dijalankan.
Folder ini dapat dibuat menggunakan:
php artisan make:listener SendWelcomeEmail
9. Folder app/Mail
Folder app/Mail digunakan untuk menyimpan class yang merepresentasikan email yang dikirim oleh aplikasi.
Folder ini akan dibuat ketika Anda membuat mail class menggunakan Artisan:
php artisan make:mail WelcomeEmail
Mail class membantu mengenkapsulasi proses penyusunan email sehingga logika pengiriman email dapat dikelola dengan lebih terstruktur.
10. Folder app/Notifications
Folder app/Notifications digunakan untuk menyimpan notification class.
Laravel menyediakan sistem notification yang memungkinkan aplikasi mengirim notifikasi melalui berbagai channel seperti email, Slack, SMS, atau menyimpan notifikasi ke database, tergantung konfigurasi dan kebutuhan aplikasi.
Folder ini akan muncul ketika Anda membuat notification menggunakan:
php artisan make:notification InvoicePaid
11. Folder app/Policies
Folder app/Policies digunakan untuk menyimpan authorization policy.
Policy digunakan untuk menentukan apakah pengguna memiliki izin untuk melakukan tindakan tertentu terhadap resource.
Misalnya, sebuah aplikasi memiliki resource Post. Policy dapat digunakan untuk menentukan apakah pengguna tertentu diperbolehkan mengubah atau menghapus post tersebut.
Policy dapat dibuat menggunakan:
php artisan make:policy PostPolicy
12. Folder app/Rules
Folder app/Rules digunakan untuk menyimpan custom validation rule objects.
Folder ini tidak tersedia secara default dan akan dibuat ketika Anda membuat validation rule menggunakan Artisan.
Contohnya:
php artisan make:rule Uppercase
Custom rule berguna ketika aplikasi memiliki aturan validasi yang cukup kompleks atau digunakan berulang kali sehingga lebih baik dipisahkan menjadi class tersendiri.
13. Folder app/Broadcasting
Folder app/Broadcasting digunakan untuk menyimpan broadcast channel classes.
Folder ini tidak dibuat pada project Laravel baru. Folder tersebut akan dibuat ketika Anda membuat channel menggunakan:
php artisan make:channel OrderChannel
Broadcasting digunakan ketika aplikasi perlu mengirim event secara real-time kepada client melalui channel yang didukung Laravel.
14. Folder bootstrap
Folder bootstrap berhubungan dengan proses awal Laravel dalam menyiapkan framework.
Dokumentasi Laravel menjelaskan bahwa folder ini berisi file app.php yang digunakan untuk melakukan bootstrap framework. Folder ini juga memiliki direktori cache yang berisi file hasil generate framework untuk kebutuhan optimasi performa, seperti cache route dan service.
Strukturnya secara umum dapat terlihat seperti:
bootstrap/
├── app.php
├── cache/
└── providers.php
bootstrap/app.php
File bootstrap/app.php merupakan salah satu file penting dalam struktur Laravel modern. File ini digunakan untuk membuat dan mengonfigurasi application instance pada tahap awal proses aplikasi.
Pada Laravel versi terbaru, beberapa konfigurasi aplikasi yang pada versi lama sering ditemukan di file khusus lainnya dapat dikonfigurasi melalui proses bootstrap aplikasi.
bootstrap/cache
Folder bootstrap/cache digunakan untuk menyimpan file cache yang dihasilkan oleh framework.
File cache tersebut digunakan untuk membantu meningkatkan performa aplikasi dengan menghindari proses tertentu yang harus dilakukan berulang kali.
Karena file di dalam folder ini dihasilkan oleh framework, developer biasanya tidak perlu mengeditnya secara manual.
15. Folder config
Folder config berisi file konfigurasi aplikasi Laravel.
Di sinilah berbagai pengaturan aplikasi dapat ditemukan. Developer sebaiknya memahami isi folder ini karena berbagai fitur Laravel menggunakan konfigurasi yang terdapat di dalamnya.
Contoh struktur file konfigurasi antara lain:
config/
├── app.php
├── auth.php
├── cache.php
├── database.php
├── filesystems.php
├── logging.php
├── mail.php
├── queue.php
└── services.php
Jumlah file konfigurasi dapat berbeda tergantung versi Laravel dan konfigurasi project.
Contohnya, konfigurasi database berada pada:
config/database.php
Sementara konfigurasi filesystem berada pada:
config/filesystems.php
Laravel juga menggunakan file environment .env untuk memberikan nilai konfigurasi yang berbeda berdasarkan environment tempat aplikasi dijalankan.
16. Folder database
Folder database digunakan untuk berbagai kebutuhan yang berhubungan dengan database.
Dokumentasi resmi Laravel menjelaskan bahwa folder ini berisi database migrations, model factories, dan seeders. Folder ini juga dapat digunakan untuk menyimpan database SQLite jika aplikasi menggunakannya.
Secara umum, Anda akan menemukan:
database/
├── factories/
├── migrations/
├── seeders/
└── database.sqlite
File database.sqlite hanya akan tersedia jika aplikasi menggunakan SQLite dan file tersebut dibuat atau disediakan oleh konfigurasi project.
database/migrations
Folder database/migrations digunakan untuk menyimpan migration.
Migration digunakan untuk mendefinisikan perubahan struktur database menggunakan kode PHP. Dengan migration, struktur database dapat dikelola dan dilacak melalui source code.
Contohnya, ketika membuat migration:
php artisan make:migration create_products_table
Laravel akan membuat file migration di dalam:
database/migrations/
database/factories
Folder database/factories digunakan untuk menyimpan model factory.
Factory dapat digunakan untuk menghasilkan data model secara otomatis, terutama ketika membutuhkan data dummy untuk development dan testing.
database/seeders
Folder database/seeders digunakan untuk menyimpan seeder.
Seeder digunakan untuk memasukkan data awal atau data tertentu ke database. Misalnya, developer dapat membuat seeder untuk memasukkan data role, kategori, atau akun administrator.
17. Folder public
Folder public merupakan folder yang sangat penting karena menjadi web root aplikasi Laravel.
Dokumentasi Laravel menjelaskan bahwa folder ini berisi file index.php yang menjadi entry point untuk request yang masuk ke aplikasi.
Struktur sederhananya:
public/
├── index.php
├── favicon.ico
└── ...
File index.php akan memulai proses aplikasi Laravel ketika request HTTP masuk.
Folder public juga digunakan untuk asset yang memang harus dapat diakses secara langsung oleh browser, seperti file hasil build frontend atau asset publik tertentu.
Mengapa Laravel Harus Menggunakan public Sebagai Web Root?
Salah satu alasan penting adalah keamanan.
Aplikasi Laravel memiliki berbagai file yang tidak boleh dapat diakses langsung melalui browser, seperti file konfigurasi, source code aplikasi, dependency Composer, dan file environment.
Karena itu, web server seharusnya diarahkan ke folder public, bukan ke root project Laravel.
Dokumentasi resmi Laravel bahkan memperingatkan agar aplikasi tidak disajikan dari subdirectory web root karena hal tersebut berpotensi mengekspos file sensitif yang terdapat di dalam aplikasi.
18. Folder resources
Folder resources digunakan untuk menyimpan view dan raw asset yang belum dikompilasi.
Dalam aplikasi Laravel yang menggunakan Blade, Anda akan banyak bekerja dengan folder:
resources/
└── views/
View Blade biasanya menggunakan ekstensi:
.blade.php
Contohnya:
resources/views/welcome.blade.php
Selain view, folder resources juga digunakan untuk asset frontend mentah seperti CSS dan JavaScript yang nantinya dapat diproses menggunakan Vite.
Pada Laravel modern, project baru umumnya sudah memiliki file package.json dan konfigurasi Vite untuk membantu proses asset bundling.
19. Folder routes
Folder routes digunakan untuk menyimpan definisi route aplikasi.
Route menentukan bagaimana aplikasi merespons URL dan HTTP request tertentu.
Pada struktur Laravel terbaru, dua file route yang disediakan secara default adalah:
routes/
├── web.php
└── console.php
routes/web.php
File routes/web.php digunakan untuk route web aplikasi.
Route yang berada di file ini ditempatkan dalam middleware group web. Middleware group tersebut menyediakan fitur seperti session state, CSRF protection, dan cookie encryption.
Jika aplikasi tidak menyediakan API stateless, sebagian besar route HTTP aplikasi biasanya akan ditempatkan pada file web.php.
Contoh route sederhana:
Route::get('/about', function () {
return view('about');
});
routes/console.php
File routes/console.php digunakan untuk mendefinisikan closure-based Artisan commands.
Walaupun namanya berada di folder routes, file ini bukan digunakan untuk HTTP route. File ini menyediakan entry point untuk command berbasis console dan juga dapat digunakan untuk mendefinisikan task scheduling.
routes/api.php
File routes/api.php tidak selalu tersedia pada project Laravel baru.
Jika aplikasi membutuhkan API routes, Anda dapat memasang API routing menggunakan:
php artisan install:api
Route API ditujukan untuk endpoint stateless dan tidak memiliki akses terhadap session state seperti route yang menggunakan middleware web.
routes/channels.php
File routes/channels.php digunakan untuk mendaftarkan broadcasting channels.
File ini juga tidak selalu tersedia pada project baru dan dapat dipasang ketika aplikasi membutuhkan fitur broadcasting.
20. Folder storage
Folder storage digunakan untuk menyimpan berbagai file yang dihasilkan oleh framework maupun aplikasi.
Dokumentasi Laravel menjelaskan bahwa folder ini dapat berisi log, compiled Blade templates, file-based sessions, file cache, dan berbagai file lain yang dihasilkan framework.
Folder storage dibagi menjadi beberapa bagian:
storage/
├── app/
├── framework/
└── logs/
storage/app
Folder storage/app dapat digunakan untuk menyimpan file yang dihasilkan aplikasi.
Pada konfigurasi filesystem Laravel terbaru, local disk secara default menggunakan:
storage/app/private
File yang disimpan menggunakan local filesystem tidak secara otomatis dapat diakses secara publik melalui browser.
storage/app/public
Folder storage/app/public digunakan untuk file yang memang ingin dibuat dapat diakses secara publik.
Contohnya adalah avatar pengguna atau file upload tertentu yang memang perlu ditampilkan pada halaman website.
Agar file di dalam folder tersebut dapat diakses melalui web, Laravel menyediakan command:
php artisan storage:link
Command tersebut membuat symbolic link dari:
public/storage
ke:
storage/app/public
storage/framework
Folder storage/framework digunakan untuk berbagai file yang dihasilkan framework dan cache.
Developer umumnya tidak perlu mengelola file di dalam folder ini secara manual.
storage/logs
Folder storage/logs digunakan untuk menyimpan log aplikasi.
Log sangat berguna ketika melakukan debugging karena dapat membantu developer mengetahui error atau kejadian tertentu yang terjadi pada aplikasi.
21. Folder tests
Folder tests digunakan untuk menyimpan automated tests aplikasi.
Laravel menyediakan dukungan testing menggunakan Pest dan PHPUnit.
Pada project Laravel baru, folder tests umumnya memiliki:
tests/
├── Feature/
└── Unit/
tests/Feature
Feature test digunakan untuk menguji fitur aplikasi secara lebih menyeluruh.
Misalnya, Anda dapat menguji apakah endpoint tertentu dapat diakses, apakah pengguna dapat melakukan login, atau apakah proses tertentu menghasilkan response yang sesuai.
tests/Unit
Unit test digunakan untuk menguji bagian kecil dan terisolasi dari kode aplikasi.
Dokumentasi Laravel menjelaskan bahwa test di dalam folder Unit tidak melakukan boot terhadap aplikasi Laravel sehingga test tersebut tidak dapat langsung mengakses database atau service framework aplikasi.
Test dapat dijalankan menggunakan:
php artisan test
22. Folder vendor
Folder vendor berisi dependency yang dikelola oleh Composer.
Ketika Anda menjalankan:
composer install
Composer akan memasang dependency PHP yang dibutuhkan oleh project ke dalam folder vendor.
Karena isinya merupakan dependency yang dikelola Composer, developer biasanya tidak mengedit file di dalam folder ini secara manual.
Folder vendor juga sangat penting bagi aplikasi Laravel karena framework dan berbagai package PHP yang digunakan aplikasi berada di dalam dependency Composer.
23. File .env
File .env berada di root project Laravel dan digunakan untuk konfigurasi berbasis environment.
Dengan environment configuration, aplikasi dapat menggunakan nilai konfigurasi yang berbeda antara development, testing, dan production tanpa harus mengubah source code utama.
Contohnya adalah konfigurasi database:
DB_CONNECTION=sqlite
Atau ketika menggunakan MySQL:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
File .env dapat berisi informasi sensitif. Karena itu, file tersebut sebaiknya tidak dimasukkan ke source control.
24. File artisan
File artisan merupakan command-line interface yang disediakan Laravel.
Melalui Artisan, developer dapat menjalankan berbagai command untuk membantu proses development.
Contohnya:
php artisan serve
atau command untuk membuat controller:
php artisan make:controller ProductController
Anda juga dapat melihat daftar command yang tersedia dengan:
php artisan list
Artisan merupakan salah satu tool yang paling sering digunakan ketika mengembangkan aplikasi Laravel.
25. File composer.json
File composer.json berisi konfigurasi dan dependency PHP yang digunakan oleh project.
Composer membaca file tersebut untuk mengetahui package apa saja yang dibutuhkan aplikasi.
File ini juga berhubungan dengan konfigurasi autoloading aplikasi, termasuk namespace App yang digunakan untuk class pada folder app.
26. File package.json
File package.json digunakan untuk mengelola dependency JavaScript dan script frontend project.
Laravel modern menggunakan Vite untuk asset bundling. Project Laravel baru telah menyediakan konfigurasi dasar yang diperlukan untuk mulai menggunakan Vite.
Dependency frontend dapat dipasang menggunakan:
npm install
Setelah dependency terpasang, proses development atau build asset dapat dilakukan menggunakan script yang tersedia pada package.json.
27. File phpunit.xml
File phpunit.xml berisi konfigurasi PHPUnit untuk kebutuhan testing.
Laravel menyediakan dukungan testing sejak awal sehingga developer dapat langsung membuat dan menjalankan automated tests tanpa harus membangun seluruh konfigurasi testing dari awal.
Bagaimana Alur Folder Laravel Saling Berhubungan?
Memahami setiap folder secara terpisah memang penting, tetapi akan lebih mudah memahami Laravel jika kita melihat bagaimana bagian-bagian tersebut saling berhubungan.
Misalnya, ketika pengguna membuka URL:
https://example.com/products
Request akan masuk melalui entry point aplikasi yang berada di:
public/index.php
Laravel kemudian memproses request tersebut dan mencari route yang sesuai di dalam:
routes/web.php
Jika route menggunakan controller, request dapat diteruskan ke controller yang berada di:
app/Http/Controllers/
Controller kemudian dapat berinteraksi dengan model yang berada di:
app/Models/
Model dapat mengambil data dari database berdasarkan konfigurasi yang terdapat pada:
config/database.php
Hasil pengolahan data kemudian dapat dikirim ke view yang berada di:
resources/views/
Dengan demikian, alurnya secara sederhana dapat digambarkan seperti:
Browser
↓
public/index.php
↓
routes/web.php
↓
Controller
↓
Model
↓
Database
↓
Controller
↓
resources/views
↓
Browser
Tentu saja, aplikasi Laravel modern dapat memiliki alur yang jauh lebih kompleks karena dapat melibatkan middleware, service container, jobs, events, policies, API, Livewire, dan berbagai service lainnya.
Folder Laravel Mana yang Paling Sering Digunakan?
Jika Anda masih pemula, tidak perlu menghafalkan seluruh folder Laravel sekaligus. Fokus terlebih dahulu pada beberapa folder yang paling sering digunakan ketika membangun aplikasi.
| Folder | Fungsi Utama |
|---|
app/ | Core code aplikasi |
app/Http/Controllers/ | Menyimpan controller |
app/Models/ | Menyimpan model Eloquent |
app/Providers/ | Menyimpan service provider aplikasi |
config/ | Menyimpan konfigurasi aplikasi |
database/ | Migration, factory, dan seeder |
public/ | Web root dan entry point aplikasi |
resources/ | View dan raw frontend assets |
routes/ | Definisi route aplikasi |
storage/ | File hasil generate aplikasi dan framework |
tests/ | Automated tests |
vendor/ | Dependency Composer |
Apakah Semua Folder Harus Ada Sejak Awal?
Tidak.
Salah satu hal yang perlu dipahami ketika mempelajari struktur folder Laravel adalah beberapa folder baru dibuat ketika Anda membutuhkan fitur tertentu.
Misalnya, folder app/Jobs tidak harus tersedia pada project baru. Folder tersebut dapat dibuat ketika Anda menjalankan:
php artisan make:job ProcessPayment
Hal yang sama berlaku untuk folder seperti Events, Listeners, Mail, Notifications, Policies, dan Rules.
Pendekatan tersebut membuat struktur project Laravel tetap relatif bersih dan hanya memiliki direktori tambahan ketika memang dibutuhkan oleh aplikasi.
Apakah Boleh Mengubah Struktur Folder Laravel?
Boleh.
Laravel tidak memberikan batasan yang sangat ketat mengenai lokasi class aplikasi selama Composer dapat melakukan autoload terhadap class tersebut.
Namun, untuk developer yang masih belajar Laravel, sebaiknya tetap mengikuti struktur bawaan Laravel terlebih dahulu. Struktur standar akan membuat project lebih mudah dipahami, terutama ketika mengikuti dokumentasi resmi atau bekerja bersama developer lain.
Setelah memahami Laravel dengan baik, Anda dapat mengembangkan struktur aplikasi sesuai kebutuhan arsitektur project.
Kesalahan Umum Saat Memahami Struktur Laravel
1. Menganggap Semua Logic Harus Berada di Controller
Controller memang menangani request HTTP, tetapi bukan berarti seluruh business logic harus ditempatkan di controller.
Seiring aplikasi berkembang, logic dapat dipisahkan menggunakan model, service, job, event, policy, atau class lain sesuai kebutuhan.
2. Menyimpan File Sensitif di public
Folder public merupakan web root sehingga file yang ditempatkan di sana berpotensi dapat diakses melalui browser.
Jangan menempatkan file seperti credential, konfigurasi sensitif, atau source code aplikasi di dalam folder tersebut.
3. Mengedit Folder vendor Secara Manual
Folder vendor merupakan tempat dependency Composer. Perubahan manual pada folder ini dapat hilang ketika dependency di-install atau diperbarui kembali.
4. Menganggap storage/app dan public/storage adalah Folder yang Sama
Keduanya memiliki fungsi berbeda. storage/app/public merupakan lokasi penyimpanan file publik, sedangkan public/storage merupakan symbolic link yang mengarah ke lokasi tersebut ketika storage link dibuat.
5. Mengikuti Tutorial Laravel Versi Lama Tanpa Memeriksa Dokumentasi
Struktur Laravel dapat berubah dari satu versi ke versi lainnya. Oleh karena itu, tutorial lama dapat memberikan informasi yang sudah tidak sesuai dengan struktur Laravel terbaru.
Salah satu contoh yang perlu diperhatikan adalah struktur bootstrap dan konfigurasi HTTP pada Laravel modern. Karena itu, ketika mengikuti tutorial Laravel, selalu periksa versi Laravel yang digunakan dan cocokkan dengan dokumentasi resminya.
Cara Cepat Mengingat Struktur Folder Laravel
Jika Anda baru belajar Laravel, Anda tidak perlu langsung menghafalkan seluruh folder. Gunakan pola sederhana berikut:
app → kode utama aplikasi
config → konfigurasi
database → database
public → file yang diakses web
resources → view dan asset mentah
routes → route
storage → file hasil aplikasi/framework
tests → testing
vendor → dependency Composer
Khusus folder app, ingat beberapa bagian penting:
app/
├── Http → controller, middleware, request
├── Models → model Eloquent
└── Providers → service provider
Folder tambahan seperti Jobs, Events, Listeners, Mail, Notifications, Policies, dan Rules dapat muncul sesuai fitur yang dibuat menggunakan Artisan.
Kesimpulan
Memahami struktur folder Laravel dan fungsinya merupakan salah satu fondasi penting sebelum mulai membangun aplikasi Laravel yang lebih kompleks.
Folder app menjadi tempat utama kode aplikasi, sedangkan config digunakan untuk konfigurasi. Folder database menangani migration, factory, dan seeder. Folder routes menyimpan definisi route, sementara resources menyimpan view dan raw asset frontend.
Di sisi lain, folder public menjadi web root dan entry point aplikasi, storage menyimpan berbagai file hasil aplikasi maupun framework, tests digunakan untuk automated testing, dan vendor berisi dependency yang dikelola Composer.
Hal penting lainnya adalah memahami bahwa tidak semua folder akan langsung tersedia pada saat project Laravel pertama kali dibuat. Laravel akan membuat beberapa direktori di dalam app ketika Anda menggunakan Artisan untuk menghasilkan class tertentu.
Setelah memahami struktur folder Laravel, langkah berikutnya yang sangat penting untuk dipelajari adalah routing. Routing akan membantu Anda memahami bagaimana URL yang dibuka pengguna dapat diarahkan ke controller, closure, atau bagian aplikasi lainnya.
Referensi Resmi Laravel
Catatan: Artikel ini mengacu pada dokumentasi resmi Laravel 13.x yang tersedia saat artikel ditulis. Struktur project dapat memiliki perbedaan tergantung versi Laravel, fitur yang di-install, dan class yang telah dibuat menggunakan Artisan.