Laravel’de projede tanımlı ENV değerlerine erişme

Projelerimizde çoğu zaman çeşitli config tanımlamaları yapmamız gerekiyor. En basitinden, local development ortamımızda veritabanı ayarlarımız farklı iken, sunucuda farklı olabilir. Bu farklılıkları tanımlamak için farklı farklı yöntemler vardır. Her bir ortam için özel dosya oluşturmak, bilgisayarın ENV değelerini kullanmak, herkesi aynı değişken değerlerini kullanmaya zorlamak 🙂 gibi. Laravel, proje özelindeki değişkenlerin tanımı için vlucas/phpdotenv paketini kullanmaktadır. Symfony Framework’de 3.4 versiyonu ile birlikte .env kullanımına başladı. Biz .env yaklaşamını oldukça beğeniyoruz açıkçası.

.env dosyasında tanımlı değerlerin proje içerisinde kullanımına dair sıkça yapılan bir hata var. Bu yazımızda özellikle bunu paylaşmak istedik. vlucas/phpdotenv paketi sayesinde, .env dosyasında tanımlı bir değere env(‘CONFIG_KEY’) şeklinde ulaşabilirsiniz. Oldukça pratik. Hem sunucu bazlı değişkenleri kontrol ediyor, hem de .env dosyanıza bakıyor ve ona göre bir değer döndürüyor. Fakat Laravel’de, eğer production ortamında config dosyanızı cacheliyorsanız (php artisan config:cache) -ki şiddetle tavsiye ederiz-, artık .env dosyanızda tanımlı değişkenlere `env(‘’), methodu ile erişemezsiniz.

Bunun için yapmanız gereken tek şey, env değerlerinizi config dosyalarında tanımlamak ve config() üzerinden kullanmak. Diyelim ki .env dosyanızda bir config değeriniz var.

ANALYTICS_ID=degisken

Bu değeri, config dosyası üzerinde kullanabilirsiniz. Bunun için istediğiniz config dosyasını kullanabileceğiniz gibi, yeni bir dosya da ekleyebilirsiniz. Örneğin, config/site.php diye bir dosya ekleyelim.


<?php //config/site.php return [ ‘analytics_id’ => env(‘ANALYTICS_ID’), ];

şeklinde dosyayı tanımladığınızda, bu değere config(‘site.analytics_id’) şeklinde erişebilirsiniz. Bu sayede, config cache’i yaptığınızda da env değelerinize erişebilirsiniz.