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.php
yang merupakan bootstrap framework. Di direktori ini juga terdapat direktoricache
yang 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
PHPUnit
dan fitur tes disediakan. Setiap class tes harus diakhiri dengan kataTest
. Tes dapat dijalankan dengan perintahphpunit
atauphp 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
app
yang dapat di-generate oleh Artisan melalui command/perintah. Untuk melihat perintah yang tersedia, jalankan perintahphp artisan list make
melalui 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 dimanaRouteServiceProvider
ditempatkan 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 dimanaRouteServiceProvider
ditempatkan 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 broadcasting
yang 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/storage
yang mengarah ke direktori ini. Kita dapat membuat link itu menggunakan command Artisanphp artisan storage:link
.
Direktori Penting Lainnya
- Direktori Broadcasting, direktori
broadcasting
memuat 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
console
memuat 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:generate
danmake:event
. DirektoriEvents
memuat class-class event. Event dapat digunakan untuk memberikan alarm bagian-bagian aplikasi kita bahwa perintah yang diberikan telah dilaksanakan. - Direktori Exception, direktori
Exceptions
memuat 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 classHandler
di dalam direktori ini - Direktori Http, direktori
Http
memuat 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
. DirektoriJobs
memuat 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:generate
ataumake:listener
. DirektoriListeners
memuat class yang meng-handle event kita. Event listeners menerima event instance dan melakukan logika dalam merespon event yang terjadi. Sebagai contoh, eventUserRegistered
akan di-handle oleh listenerSendWelcomeEmail
. - Direktori Mail, direktori ini tidak ada secara default, tetapi akan dibuat ketika kita mengeksekusi perintah Artisan
make:mail
. DirektoriMail
memuat 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
Models
memuat 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
. DirektoriNotifications
memuat 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
. DirektoriPolicies
memuat class otorisasi policy untuk aplikasi kita. Policy digunakan untuk menentukan apakah user dapat melakukan aksi yang diberikan terhadap database. - Direktori Providers, direktori
Providers
memuat 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
. DirektoriRules
memuat aturan custom validation untuk aplikasi kita. Rules digunakan untuk mengenkapsulasi logika validasi yang rumit menjadi object yang sederhana.