Uygulamanın kök dizininde .env dosyası var. Laravel kurulduğunda .env.example dosyasının kopyasından .env adı ile bu dosyayı oluşturur.
Bu dosyanın içerisinde framework ayarları var. Uygulama ayarları, veritabanı, mail, pusher vs...
Buraya biz kendi ayarlarımızı da ekleyebiliyoruz.
GOOGLE_API_KEY=AIuf67557sjkh435bbnb6 gibi
Bu ayarlara framework içerisinde env() yardımcı fonksiyonu ile ulaşıyoruz. Örneğin
env('GOOGLE_API_KEY'); gibi
Yalnız bu .env dosyası sadece lokal ortamda, yani geliştirme ortamında, yani kendi bilgisayarınızda devreye giriyor. O yüzden sunucuya göndermiyorsunuz.
Genellikle sunucuda (prod/production environment) kullanılan ayarlar ile (örneğin veritabanı adı, şifresi vs) geliştirme ortamındaki (dev/development environment) ayarlar farklı olur. Sürekli ayar dosyaları güncellenmesin diye Laravel bu şekilde ortam-duyarlı değişken sistemi kullanıyor.
Şimdi benim bilgisayarımda veritabanı şifresi ABC123 ama sunucuda XYZ866. Böyle, env şeklinde bir sistem olmadığını düşünün. Ben bu dosyayı sunucuya gönderdikten sonra bilgisayarımdakini tekrar ABC123 yapmak zorunda kalırım. GIT gibi bir versiyon kontrolü kullanıyorsam bu bana sıkıntı çıkarır.
O yüzden bu .env dosyası aynı anda kendi bilgisayarınız için ayrı, sunucu için ayrı ayar yapmanıza olanak sağlıyor.
env() yardımcı fonksiyonu 2 parametre alır. İlki .env dosyasındaki değişken adı, ikincisi ise öyle bir değişken yoksa yerine çekilecek bir öntanımlı değer.
Örneğin config/database.php dosyasını açın bakın:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'server_db'),
'username' => env('DB_USERNAME', 'server_user'),
'password' => env('DB_PASSWORD', 'XYZ866'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => 'InnoDB',
],
Burada örneğin
'database' => env('DB_DATABASE', 'server_db'), //
Kendi bilgisayarım ise .env dosyasındaki DB_DATABASE değişkenini kullan, sunucu ise veritabanı adı server_db olsun demek
'username' => env('DB_USERNAME', 'server_user'), //
Kendi bilgisayarım ise .env dosyasındaki DB_USERNAME değişkenini kullan, sunucu ise kullanıcı adı server_user olsun demek
'password' => env('DB_PASSWORD', 'XYZ866'), //
Kendi bilgisayarım ise .env dosyasındaki DB_PASSWORD değişkenini kullan, sunucu ise veritabanı şifresi XYZ866 demek
Yani anlayacağınız .env dosyasını biz gerçek ayarlar için kullanmıyoruz.
Ben de sizin mailtrap.io kullanmadığınızı varsayarak ayarları .env dosyasında yaptığınızı, config/mail.php de sunucu ayarları yapmadığınızı düşünüyorum.
Diğeri düşüncem ise .env dosyasında ayarları değiştirmeden önce config:cache yayıp ayarları önbelleğe aldınız, sonra .env dosyasını değiştirdiniz ama tekrar config:cache yapmadığınız için eski ayarlar devrede. O yüzden diğer yazımda önbelleği temizleyen komutları verdim.
Başka bir sorun da olabilir ama ayrıntılı bilgi vermediğiniz için düşüncem bu.