laravelconfigenvMahir3 mnt baca

Environment dan Konfigurasi

Kelola .env dan config(): bedanya, caching config di production, dan jebakan env() setelah cache.

.env vs config/

Ada dua lapis konfigurasi. File .env menyimpan nilai rahasia per environment (password, API key). File di config/ menyimpan struktur konfigurasi yang membaca dari .env:

php
// config/services.php
'mailgun' => [
    'domain' => env('MAILGUN_DOMAIN'),
    'secret' => env('MAILGUN_SECRET'),
],

Di kode aplikasi, JANGAN panggil env() langsung. Selalu lewat helper config():

php
// Benar
$domain = config('services.mailgun.domain');

// Salah: akan bermasalah setelah config di-cache (lihat bawah)
$domain = env('MAILGUN_DOMAIN');

Kenapa? Karena env() hanya boleh dipanggil di dalam file config/. Di tempat lain pakai config().

Config caching di production

Di production, Laravel bisa menggabungkan semua file config jadi satu file cepat:

bash
php artisan config:cache
php artisan route:cache
php artisan view:cache

Setelah config:cache, semua panggilan env() di luar file config mengembalikan null. Ini jebakan klasik: aplikasi jalan normal di local, error misterius di server.

Catatan teknis: Setiap kali mengubah .env di server yang sudah di-cache, WAJIB jalankan php artisan config:clear (atau config:cache ulang). Lupa langkah ini adalah penyebab nomor satu "kok config tidak berubah" setelah deploy. Masukkan perintah clear/cache ini ke skrip deploy-mu.

Konfigurasi per environment

bash
# .env (local)
APP_DEBUG=true
MAIL_MAILER=log

# .env.production (server)
APP_DEBUG=false
MAIL_MAILER=smtp

APP_DEBUG=true menampilkan stack trace detail saat error, sangat membantu saat coding tapi BAHAYA di production karena membocorkan struktur kode dan config. Pastikan false di server.

Membuat config sendiri

php
// config/blog.php
return [
    'posts_per_page' => env('POSTS_PER_PAGE', 15),
    'allow_comments' => env('ALLOW_COMMENTS', true),
];

// Pakai: config('blog.posts_per_page')

Nilai default di env('KEY', default) memastikan aplikasi tetap jalan walau key belum ada di .env.