Laravel env() vs config()


Di Laravel, ada helper function yang bisa dipakai di mana aja, salah duanya yaitu env() dan config(). Yang env untuk mengambil nilai dari environment variable, baik dari OS env ataupun file .env di root folder aplikasi. Sedangkan fungsi config, mengambil nilai dari deklarasi key-value di semua file *.php yang ada di dalam folder config. Sekilas fungsinya sama, ambil nilai dari key-value pair. Terus, kenapa dibedain?

Pertama, beda di maksudnya. Sesuai namanya, env() itu mengacu ke environment di mana aplikasi itu dijalankan, yang biasanya berkaitan dengan sistem eksternal. Misal apakah server dev/prod, kredensial database server, mail server, external API key, dll. Sedangkan config(), itu mengacu ke konfigurasi yang digunakan/di-refer di internal aplikasi. Misal log file name, konfigurasi driver database, session timeout, auth guard, dll.

Kedua, env() tidak bekerja ketika config dibuat cache-nya dengan command:

> php artisan config:cache

Biasanya command itu dilakukan di server/environment production, supaya loading aplikasi sedikit lebih cepat. Semua konfigurasi di semua file dalam folder config di-pool jadi satu file yang akan di-lookup oleh fungsi config(). Sedangkan fungsi env() akan selalu return null jika ada file cache tersebut. Cekidot dokumentasinya.

Jadi jangan heran kalau file config bawaan Laravel itu banyak yg manggil fungsi env(). Kayaknya memang best practice-nya begitu. Agar ketika nantinya config di-cache, gak hilang nilai yang udah kita set di environment variables.

So, saat ngoding pake Laravel, sebaiknya hindari panggil fungsi env() secara langsung di luar file config. Usahakan hanya dipanggil di dalam file config aja. Terus kalau mau dipake, panggil fungsi config() deh.

comments powered by Disqus