Struktur File Laravel

Muhammad Fajri
Monday, 05 April 2021

Bismillahirrahmanirrahim.

Direktori Laravel

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 direktori cache 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, dan channels.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, dan logs.
  • Direktori Test, memuat tes otomatis kita. Sebagai contoh unit tes PHPUnit dan fitur tes disediakan. Setiap class tes harus diakhiri dengan kata Test. Tes dapat dijalankan dengan perintah phpunit atau php vendor/bin/phpunit. Jika menginginkan tampilan yang lebih rinci dan tampilan yang baik dari hasil tes, gunakan perintah Artisan php 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 perintah php 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 dimana RouteServiceProvider ditempatkan di grup middleware web, 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 file web.php.
  • api.php, memuat route dimana RouteServiceProvider ditempatkan di grup middleware app. 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 channels event 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 di public/storage yang mengarah ke direktori ini. Kita dapat membuat link itu menggunakan command Artisan php artisan storage:link.

Direktori Penting Lainnya

  • Direktori Broadcasting, direktori broadcasting memuat semua class channel broadcast dari aplikasi kita. Class-class ini di-generate menggunakan perintah make: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 perintah make: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 dan make:event. Direktori Events 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 class Handler 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. Direktori Jobs 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 atau make:listener. Direktori Listeners memuat class yang meng-handle event kita. Event listeners menerima event instance dan melakukan logika dalam merespon event yang terjadi. Sebagai contoh, event UserRegistered akan di-handle oleh listener SendWelcomeEmail.
  • Direktori Mail, direktori ini tidak ada secara default, tetapi akan dibuat ketika kita mengeksekusi perintah Artisan make:mail. Direktori Mail 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 method Mail::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. Direktori Notifications 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. Direktori Policies 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. Direktori Rules memuat aturan custom validation untuk aplikasi kita. Rules digunakan untuk mengenkapsulasi logika validasi yang rumit menjadi object yang sederhana.

Referensi