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:
// config/services.php
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
],Di kode aplikasi, JANGAN panggil env() langsung. Selalu lewat helper config():
// 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:
php artisan config:cache
php artisan route:cache
php artisan view:cacheSetelah 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
.envdi server yang sudah di-cache, WAJIB jalankanphp artisan config:clear(atauconfig:cacheulang). 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
# .env (local)
APP_DEBUG=true
MAIL_MAILER=log
# .env.production (server)
APP_DEBUG=false
MAIL_MAILER=smtpAPP_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
// 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.