aybarsalvarci .env dosyası ayar dosyası değildir. Bir uygulama birden fazla ortamda yer alır. Bunlar en az 3 tanedir, biri sizin bilgisayarınız (local), biri geliştirme/test (dev/development) ortamı, diğeri ise canlı (prod/production). Arada fazladan önizleme (stag/staging) gibi ortamlar da olabilir. Her bir ortamın kendine farklı ayarları olur. Örneğin dev ortamının veritabanı bilgileri, mail bilgileri farklıdır; canlı ortamınki farklıdır. İşte farklı ortamlarda farklı ayarlar kullanmak için env dosyası kullanılır:
+-------------+---------+-------------+-------------+
| | local | dev | prod |
+-------------+---------+-------------+-------------+
| DB_DATABASE | projedb | dev_db_1 | prod_db_1 |
| DB_USERNAME | root | dev_db_usr | prod_db_usr |
| DB_PASSWORD | root | VysE(=b9veu | x~L'DK6s36: |
+-------------+---------+-------------+-------------+
Üstteki tablo 3 farklı ortamdaki 3 farklı .env dosyasındaki değişkenlerin nasıl değiştiğini gösteriyor.
.env dosyası GIT'e dahil edilmez, (genellikle) elle sunucuya eklenir.
Ayarlar dediğimiz kök dizindeki config klasörünün içerisidir. Bu dosyalardaki env('DB_DATABASE', 'prod_db_1')
şeklinde kullanılan env() yönteminin yaptığı iş ".env dosyası varsa ve içinde DB_DATABASE değeri varsa onu kullan, yoksa prod_db_1 değerini kullan" demektir. İhtiyaçlarına göre prod ortamına da .env dosyası gönderenler var. Ben prod bilgilerini config dosyasına işliyorum, prod ortamına .env dosyası koymuyorum. Böylece prod ortamında env() yöntemi sayesinde otomatik olarak config klasöründeki değerler okunuyor.
Veritabanından ayarları okuma ya da ayarları anlık değiştirme gibi konularda forumda arama yapabilirsiniz. Ben burada bunun cevabını vermedim. Verdiğim cevabın amacı .env dosyasını controller üzerinden manipüle etmeyeceksiniz, o dosya düşündüğünüz dosya değil demek için.
Dokümanları okuyalım. İngilizcemiz yetmiyorsa İngilizcemizi geliştirelim:
https://laravel.com/docs/8.x/configuration