Struktur File Laravel
Bismillahirrahmanirrahim.

Pengenalan Struktur File
Struktur default aplikasi Laravel dimaksudkan untuk menyediakan langkah awal yang bagus baik untuk aplikasi yang kecil maupun yang besar. Akan tetapi aplikasi yang kita buat dapat diatur sendiri sesuai keinginan. Laravel hampir tidak memberikan batasan pada sebuah class di mana pun ditempatkan sepanjang Composer dapat melakukan autoload/memuat otomatis class tersebut.
Direktori Root
- Direktori App, memuat kode dasar dari aplikasi. Hampil semua class yang ada pada aplikasi ditempatkan di folder ini.
- Direktori Bootstrap, memuat file
app.phpyang merupakan bootstrap framework. Di direktori ini juga terdapat direktoricacheyang memuat framework file yang ter-generate untuk optimasi kinerja seperti file route dan layanan cache. Kita seharusnya tidak perlu mengubah file apapun di dalam direktori ini. - Direkotori Config, seperti namanya, memuat file konfigurasi dari aplikasi. Merupakan ide bagus untuk membaca keseluruhan isi file dan membiasakan diri pilihan apa saja yang tersedia.
- Direktori Database, memuat seluruh database migration, model factory, dan seed. Jika diperlukan, database SQLite juga dapat ditampung di sini.
- Direkroti Public, memuat file
index.php, yang merupakan pintu masuk dari semua request terhadap aplikasi dan mengonfigurasi autoloading. Direktori ini juga memuat semua assets seperti gambar, JavaScript, dan CSS. - Direktori Resources, memuat semua view dan raw, assets yang tidak dikompilasi seperti CSS atau JavaScript. Direktori ini juga menampung semua file bahasa.
- Direktori Routes, memuat semua definisi route dari aplikasi kita. Secara default, beberapa file route yang disertakan dengan Laravel seperti
web.php,api.php,console.php, danchannels.php. - Direktori Storage, memuat log-log, template Blade yang dikompilasi, file session, file cache, dan file yang lainnya yang di-generate oleh framework. Direktori ini terbagi ke dalam direktori
app,framework, danlogs. - Direktori Test, memuat tes otomatis kita. Sebagai contoh unit tes
PHPUnitdan fitur tes disediakan. Setiap class tes harus diakhiri dengan kataTest. Tes dapat dijalankan dengan perintahphpunitatauphp vendor/bin/phpunit. Jika menginginkan tampilan yang lebih rinci dan tampilan yang baik dari hasil tes, gunakan perintah Artisanphp artisan test. - Direktori Vendor, memuat dependensi dari Composer kita.
Direktori App
Sebagian besar dari aplikasi kita berada di direktori app. Secara default, direktori ini memiliki namespace di bawah App dan dimuat otomatis oleh Composer menggunakan standar autoloading PSR-4.
Direktori app memuat beragam direktori tambahan seperti Console, Http dan Providers. Bayangkan direktori Console dan Http sebagai penyedia API ke dalam core/inti dari aplikasi. Protokol HTTP dan CLI keduanya memiliki mekanisme untuk berinteraksi dengan aplikasi kita, tetapi tidak benar-benar memuat logika aplikasi. Dengan kata lain, ada dua cara melakukan command pada aplikasi. Direktori Console memuat semua perintah Artisan, sementara direktori Http memuat semua controller, middleware, dan request.
Beragam direktori lain akan di-generate ke dalam direktori app sesaat menggunakan perintah Artisan make untuk men-generate class. Jadi, sebagai contoh, direktori app/Jobs tidak akan ada sampai kita mengeksekusi perintah Artisan make:job untuk men-generate class job.
Ada banyak class yang terdapat di dalam direktori
appyang dapat di-generate oleh Artisan melalui command/perintah. Untuk melihat perintah yang tersedia, jalankan perintahphp artisan list makemelalui terminal.
Direktori Routes
Di dalam direktori routes yang secara default memuat file web.php, api.php, console.php, dan channels.php.
web.php, memuat route dimanaRouteServiceProviderditempatkan di grup middlewareweb, yang menyediakan session, proteksi CSRF, dan enkripsi cookie. Jika aplikasi yang kita buat tidak menawarkan stateless, RESTful API akan seperti bahwa semua route hampir semuanya didefinisikan di dalam fileweb.php.api.php, memuat route dimanaRouteServiceProviderditempatkan di grup middlewareapp. Route ini dimaksudkan menjadi stateless, jadi request yang masuk ke aplikasi melalui route ini dimaksudkan untuk diautentikasi melalui token dan tidak akan memiliki akses pada session.console.php, file yang dimana kita dapat mendefinisikan semua closure dengan basis perintah console. Semua closure yang diikat pada command selanjutnya mengizinkan pendekatan yang sederhana untuk berinteraksi dengan setiap method perintah I/O. Meskipun route ini tidak mendefinisikan route HTTP, ia mendefinisikan console berdasarkan pintu masuk ke dalam aplikasi.channels.php, file dimana kita dapat mendaftarkan semua channelsevent broadcastingyang didukung oleh aplikasi.
Direktori Storage
Direktori yang ada di dalam direktori ini yaitu:
- Direktori
app, digunakan untuk menyimpan file-file yang di-generate oleh aplikasi. - Direktori
framework, digunakan untuk menyimpan framework yang men-generate file dan cache. - Direktori
logs, memuat file log dari aplikasi kita. - Direktori
storage/app/public, dapat digunakan untuk menyimpan file yang di-generate oleh user, seperti foto profil, yang dapat diakses secara publik. Kita harus membuat symbolic link dipublic/storageyang mengarah ke direktori ini. Kita dapat membuat link itu menggunakan command Artisanphp artisan storage:link.
Direktori Penting Lainnya
- Direktori Broadcasting, direktori
broadcastingmemuat semua class channel broadcast dari aplikasi kita. Class-class ini di-generate menggunakan perintahmake:channel. Direktori ini tidak ada secara default, tetapi akan dibuat setelah kita membuat channel untuk pertama kali. - Direktori Console, direktori
consolememuat semua perintah custom Artisan untuk aplikasi kita. Perintah ini di-generate menggunakan perintahmake:command. Direktori ini juga memuat kernel console, dimana custom command Artisan didaftarkan dan tugas-tugas terjadwal didefinisikan. - Direktori Event, direktori ini tidak ada secara default, tetapi akan dibuatkan dengan mengeksekusi perintah Artisan
event:generatedanmake:event. DirektoriEventsmemuat class-class event. Event dapat digunakan untuk memberikan alarm bagian-bagian aplikasi kita bahwa perintah yang diberikan telah dilaksanakan. - Direktori Exception, direktori
Exceptionsmemuat exception handler dan juga merupakan tempat yang bagus untuk menempatkan exception apapun yang dihasilkan oleh aplikasi. Jika kita ingin men-customize bagaimana exception di-log dan di-render, kita harus mengedit classHandlerdi dalam direktori ini - Direktori Http, direktori
Httpmemuat controller, middleware, dan formulir request. Hampir semua logika yang mengendalikan request ke dalam aplikasi kita akan ditempatkan di direktori ini. - Direktori Jobs, direktori ini tidak ada secara default, tetapi akan dibuat ketika kita mengeksekusi perintah Artisan
make:job. DirektoriJobsmemuat semua antrian job untuk aplikasi kita. Job dibuatkan antrian oleh aplikasi atau berjalan secara sinkron dalam daur hidup job dari request saat ini. Job-job yang berjalan secara sinkron selama request saat ini kadang-kadang mengacu sebagai “command” sejak mereka merupakan implementasi dari pola command. - Direktori Listeners, direktori ini tidak ada secara default, tetapi akan dibuat ketika kita mengeksekusi perintah Artisan
event:generateataumake:listener. DirektoriListenersmemuat class yang meng-handle event kita. Event listeners menerima event instance dan melakukan logika dalam merespon event yang terjadi. Sebagai contoh, eventUserRegisteredakan di-handle oleh listenerSendWelcomeEmail. - Direktori Mail, direktori ini tidak ada secara default, tetapi akan dibuat ketika kita mengeksekusi perintah Artisan
make:mail. DirektoriMailmemuat semua class yang menampilkan email yang dikirim oleh aplikasi kita. Object mail mengizinkan kita untuk mengenkapsulasi semua logika dari sebuah email yang dibangun menjadi satu, class sederhana yang mungkin dikirimkan menggunakan methodMail::send. - Direktori Models, direktori
Modelsmemuat semua class model eloquent. Eloquent ORM yang disertakan dengan Laravel menyediakan implementasi ActiveRecord yang bagus, sederhana untuk bekerja dengan database. Setiap tabel database memiliki “Model” yang sesuai yang digunakan untuk berinteraksi dengan tabel tersebut. Models mengizinkan kita untuk melakukan queri data pada tabel. - Direktori Notifications, direktori ini tidak ada secara default, tetapi akan dibuat ketika kita mengeksekusi perintah Artisan
make:notification. DirektoriNotificationsmemuat semua notifikasi “transaksi” yang dikirim oleh aplikasi kita. Fitur abstrak notifikasi dari Laravel mengirim notifikasi dari beragam driver seperti email, Slack, SMS, atau disimpan di dalam database. - Direktori Policies, direktori ini tidak ada secara default, tetapi akan dibuat ketika kita mengeksekusi perintah Artisan
make:policy. DirektoriPoliciesmemuat class otorisasi policy untuk aplikasi kita. Policy digunakan untuk menentukan apakah user dapat melakukan aksi yang diberikan terhadap database. - Direktori Providers, direktori
Providersmemuat semua service provider (penyedia layanan) untuk aplikasi kita. Penyedia layanan mem-bootstrap aplikasi kita dengan menyatukan kontainer layanan, mendaftarkan event, atau pun melakukan tugas-tugas lain untuk menyediakan aplikasi untuk request berikutnya. Aplikasi Laravel yang baru, direktori ini akan memuat beberapa provider yang sudah ada. Kita bebas menambahkan provider kita sendiri ke dalam direktori ini sesuai kebutuhan. - Direktori Rules, direktori ini tidak ada secara default, tetapi akan dibuat ketika kita mengeksekusi perintah Artisan
make:rule. DirektoriRulesmemuat aturan custom validation untuk aplikasi kita. Rules digunakan untuk mengenkapsulasi logika validasi yang rumit menjadi object yang sederhana.