Saturday 6 February 2021

Konfigurasi Laravel dan Strukturnya

Pengembangan sebuah website akan lebih mudah jika menggunakan tools yang tepat, seperti pemilihan framework yang tepat. Framework yang baik ialah framework yang sesuai dengan kebutuhan sebuah website yang sedang kita kembangkan.

Laravel adalah sebuah framework PHP yang dirilis dibawah lisensi MIT dan dibangun dengan mengimplementasikan konsep MVC (Model, View, Controller). MVC itu sendiri adalah sebuah teknik dimana ia memisahkan logic dan view dari sebuah aplikasi namun ketika ditampilkan terlihat saling berkolaborasi namun di dalam struktur folder mereka dipisahkan.

Model. Model ibaratnya mewakili basis data, biasanya didalam model terdapat fungsi-fungsi yang dapat membantu seorang developer untuk mengolah basis data dari aplikasi/website yang tengah dibuatnya.
View. View itu sendiri adalah bagian yang mengatur tampilan yang akan ditampilkan kepada user. Bisa dikatakan halaman web.
Controller. Controller merupakan jembatan yang menghubungkan model dengan view didalam sebuah website/aplikasi.

Apa Fitur yang Disediakan Laravel?
Bundles. Yaitu sebuah fitur dengan pengemasan modular dan tersedia di berbagai aplikasi.
Eloquent ORM. Yaitu penerapan PHP lanjut yang menyediakan metode internal dari "Active Record" yang mengatasi permasalahan di dalam database.
Application Logic. Merupakan bagian dari aplikasi yang menggunakan controller atau bagian route.
Reverse Routing. Mendefinisikan relasi antara Link dan Route.
Restful Controller. Memisahkan logika dalam menangani POST dan GET
Migration. Menyediakan sistem kontrol untuk database.
Automatic Pagination. Menyederhanakan tugas dari penerapan halaman.
Unit Testing. Untuk menguji agar mencegah dari regresi.
Struktur Laravel

Terdapat 2 struktur laravel yaitu Direktori Root dan Direktori App.
Struktur Root Terdiri dari:
Direktori App = berisi source code inti aplikasi.
Direktori Bootstrap = berisi file app.php yang mem-bootstrap framework.
Direktori config = berisi semua file konfigurasi aplikasi .
Direktori Database = berisi migrasi database. Dapat menggunakan direktori ini untuk menyimpan database SQLite.
Direktori Publik = berisi file index.php, yang merupakan tampilan awal masuk ketika memasuki aplikasi atau ketika mengakses laravel dan mengkonfigurasi pemuatan otomatis. Direktori ini juga menampung aset seperti gambar, JavaScript, dan CSS.
Direktori Resources = berisi tampilan Anda serta aset mentah yang tidak dikompilasi seperti LESS, SASS, atau JavaScript serta menampung semua file bahasa pemrograman.
Direktori Routes = berisi semua definisi rute untuk aplikasi. Secara default, beberapa file rute disertakan dengan Laravel: web.php, api.php, console.php, dan channels.php.
Direktori Storage berisi aplikasi penyimpanan seperti upload file dll. Framework storage (cache), dan log yang dihasilkan oleh aplikasi. Direktori aplikasi dapat digunakan untuk menyimpan file apa pun yang dibuat oleh aplikasi.
Direktori Tests = berisi uji test berbagai kasus
Direktori Vendor berisi dependensi Composer Anda.

Struktur App Terdiri dari:
Direktori Broadcasting = berisi semua kelas saluran siaran untuk aplikasi. Direktori ini tidak ada secara default, tetapi akan dibuatkan untuk Anda saat Anda membuat saluran pertama.
Direktori Console = berisi semua perintah Artisan kustom untuk aplikasi.
Direktori Events = direktori ini tidak ada secara default, tetapi akan dibuat untuk Anda dengan perintah event: generate dan make: event Artisan. Events dapat digunakan untuk mengingatkan bagian lain dari aplikasi bahwa tindakan tertentu telah terjadi, memberikan banyak fleksibilitas dan pemisahan.
Direktori Exceptions = berisi penangan pengecualian dan merupakan tempat yang baik untuk menempatkan pengecualian apa pun yang dilontarkan oleh aplikasi Anda. Jika Anda ingin menyesuaikan bagaimana pengecualian Anda dicatat atau ditampilkan, Anda harus memodifikasi kelas Handler di direktori ini.
Direktori Http = berisi pengontrol, middleware, dan permintaan. Hampir semua logika untuk menangani permintaan yang masuk ke aplikasi akan ditempatkan di direktori ini.
Direktori Jobs = direktori ini tidak ada secara default, tetapi akan dibuat jika Anda menjalankan perintah make: job Artisan.
Direktori Listeners = direktori ini tidak ada secara default, tetapi akan dibuat jika Anda menjalankan perintah event: generate atau make: listener Artisan. Direktori Listeners berisi kelas yang menangani event. Misalnya, event UserRegistered mungkin ditangani oleh pendengar SendWelcomeEmail.
Direktori Mail = direktori ini tidak ada secara default, tetapi akan dibuat jika Anda menjalankan perintah make: mail Artisan. Direktori Mail berisi semua kelas yang mewakili email yang dikirim oleh aplikasi Anda.
Direktori Model = berisi semua kelas model Eloquent. ORM yang fasih disertakan dengan Laravel menyediakan implementasi ActiveRecord. Setiap tabel database memiliki “Model” yang sesuai yang digunakan untuk berinteraksi dengan tabel itu. Model memungkinkan Anda membuat Query untuk data di tabel Anda, serta menyisipkan record baru ke dalam tabel.
Direktori Notifikasi =direktori ini tidak ada secara default, tetapi akan dibuat jika Anda menjalankan perintah make: notification Artisan. Direktori Notifications berisi semua notifikasi “transaksional” yang dikirim oleh aplikasi Anda, seperti notifikasi sederhana tentang peristiwa yang terjadi dalam aplikasi Anda. Notifikasi Laravel menampilkan abstrak pengiriman notifikasi melalui berbagai driver seperti email, Slack, SMS.
Direktori Policies = direktori ini tidak ada secara default, tetapi akan dibuat jika Anda menjalankan perintah make: policy Artisan. Direktori Kebijakan berisi kelas kebijakan otorisasi untuk aplikasi Anda. Kebijakan digunakan untuk menentukan apakah pengguna dapat melakukan tindakan tertentu terhadap resources.
Direktori Providers = berisi semua penyedia layanan untuk aplikasi seperti layanan bootstrap. Dalam aplikasi Laravel baru, direktori ini sudah berisi beberapa penyedia. bebas menambahkan penyedia sendiri ke direktori ini sesuai kebutuhan.
Direktori Rules = direktori ini tidak ada secara default, tetapi akan dibuat jika Anda menjalankan perintah make: rule Artisan. Direktori Rules berisi objek aturan validasi kustom untuk aplikasi.

Langkah awal konfigurasi laravel
Langkah awal konfigurasi laravel yaitu environment configuration. Perlu diketahui diawal bahwa laravel menggunakan library PHP DotEnv yang dibuat oleh Vance Lucas.

Pada saat instalasi laravel pertama kali, direktori root aplikasi berisi file .env.example namun jika anda melakukan instalasi menggunakan composer file tersebut akan otomatis di duplikat menjadi .env . jika tidak anda harus melakukan duplikat dan mengganti nama file yang telah di duplikat secara manual.

Hal ini dilakukan untuk mengantisipasi apabila suatu saat terjadi kesalahan ketika mengubah konfigurasi, masih terdapat file backup yaitu env.example tersebut. Sehingga konfigurasi dapat dikembalikan ke default dengan melihat isi file env.example atau melakukan duplikasi file kembali. 

 :

File .env sangat penting maka dari itu tidak boleh commit pada sistem control aplikasi anda, karena terdapat 2 alasan yaitu
Karena setiap developer mungkin membutuhkan konfigurasi .env variable yang berbeda.
Karena alasan keamanan, jika penyusup mendapatkan akses ke repositori sistem control aplikasi anda kemudian dapat mengakses file .env tentu sangat beresiko karena kredensial sensitif apapun akan terungkap.

Untuk mengatasinya, dapat dengan membuat file .env.testing yang kemudian file ini akan menimpa .env saat menjalankan tes PHP unit atau saat menjalankan perintah artisan denngan opsi .env adalag testing bukan sesungguhnya.

Berikut isi default dari file .env.example :APP_NAME=Laravel APP_ENV=local APP_KEY= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD= BROADCAST_DRIVER=log CACHE_DRIVER=file QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

Pointnya adalah file .env berisi tentang konfigurasi dasar yang perlu diatur pada project laravel.
Konfigurasi dasar apa saja yang akan diatur ?


DB_CONNECTION = digunakan untuk mengkoneksikan database , disini menggunakan database mysql
DB_HOST= digunakan untuk menunjukan alamat database, secara default yaitu 127.0.0.1
DB_PORT= digunakan untuk menunjukan port yang berhubungan dengan database, pada Mysql menggunakan port 3306.
DB_DATABASE= digunakan nama yangsesuai dengan nama database yang akan digunakan.
DB_USERNAME= digunakan untuk username credensial untuk mengakses database. Jika anda menggunakan XAMPP secara default menggunakan username root.
DB_PASSWORD= digunakan untuk password credensial untuk mengakses database. Jika anda menggunakan XAMPP secara default password yang digunakan kosong.

Konfigurasi File .env atau folder config?
Sebenarnya keduanya adalah konfigurasi dasar laravel, namun perbedaannya jika pada file .env konfigurasi dijadikan dalam 1 file sedangkan pada folder config dibeda-bedakan konfigurasinya menjadi beberapa file seperti berikut :


Namun konfigurasi yang ada dalam file .env lebih diutamakan dibandingkan konfigurasi pada file-file yang berada dalam folder config. Dilihat dari kemudahan penggunaan file .env lebih banyak digunakan.

Jika terjadi perbedaan konfigurasi semisal pada file.env menggunakan nama database “A” sedangkan pada file konfigurasi database.php yang ada pada folder config dengan nama “B”. maka tetap yang diutamakan adalah file.env sehingga yang dijalankan adalah database “A”. Namun jika ingin konfigurasi yang dilakukan pada folder config dijalankan maka anda dapat menghapus file .env .