Blade'de Laravel .env değişkenlerine erişim


89

Blade javascript'te kullanmak için .env dosyamda sakladığım bazı API anahtarlarını almaya çalışıyorum. Şunun gibi iki anahtar ekledim:

APP_ENV=local
APP_KEY=////
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
APP_GOOGLE_MAPS=////
APP_OVERHEID_IO=////

Blade'de Google Maps API ve OverheidIO API anahtarını kullanmam gerekiyor. Özel .env değişkenlerini yanlış biçimlendirmem durumunda varsayılan .env değişkenlerinden birini almayı denedim .:

{{ env('APP.ENV') }} // nothing
{{ env('APP_ENV') }} // nothing
{{ env('APP_ENV'), 'test' }} // returns 'test' 

Birisi blade'deki google maps api ve overheidio api anahtarını aramama yardım edebilir mi?


12
Tamirci içinde çalıştırmayı php artisan config:clearve test etmeyi deneyin env('APP_ENV'). Benim için localstring döndürür .
Alexey Mezenin

Teşekkürler Alexey! php artisan config:clearhile yaptı.
Anna Jeanine

@Alexey Mezenin, yorumunuzu Cevap olarak gönderirseniz iyi olmaz mı? SO kullanımı konusunda oldukça yeniyim ve kurallar hakkında çok net değilim.
manian


@YevgeniyAfanasyev bu soru benimkinin aynısı, daha önce sordum ...
Anna Jeanine

Yanıtlar:


111

Laravel'iniz .env veya veritabanı klasöründeki bazı değişikliklerden sonra veya başka herhangi bir değişiklikten sonra beklendiği gibi çalışmıyorsa en önemli beş komut. Tam açıklama: https://www.youtube.com/watch?v=Q1ynDMC8UGg

php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan view:clear
php artisan route:clear

1
Tam olarak bazen neden budur, Laravel 5.5'in zor bir önbellekleme sistemi vardır
Deepesh Thapa

2
iyi bir şey, ancak dikkat, env ('APP_ENV') üretimde başarısız olacak, bkz. stackoverflow.com/a/57626957/4820095
ndberg

1
@ndberg o zaman sen komutu kullanıyorsun php artisan config:cacheve ben onu kullanmıyorum. Lütfen oku.
Öğrenci

Merhaba @ndberg Bu soruya verdiğiniz yanıtı iki kez inceledim (yukarıdaki yorumda bulunan bağlantı) ve siz php artisan config:cache@ Öğrenici'den bahseden olarak bahsediyorsunuz. ANCAK, Öğrencinin yanıtının eksik komutu eklemek için düzenlenmesi gerekip gerekmediğinden veya bir hata yapıp yapmadığınızdan emin değilim. Lütfen açıklayın.
Guillermo Garcia

@ Öğrenen haklı, cevabında kullanmıyor ve buna gerek yok. Ancak, tüm Google çalışanları için bir taslak oluşturmak istedim: genellikle üretimde config: cache kullanıyoruz ve sonunda soruda kullanıldığı şekliyle "env ('APP.ENV')" çağrısı sorunlar getirecektir. Yani bu yanıta bir ek oldu.
ndberg

32

Bunu şu şekilde uyguladım:

@if (env('APP_ENV')!='Production')
Enviroment Test
@endif

Benim tavsiyem aşağıdaki komutu çalıştırmaktır: composer self-update


2
Yapılandırma önbelleği etkinleştirilirse bu başarısız olur. configBunun yerine kullanın
ncatnow

2
Şu şekilde yazılabilir@if(App::environment('production'))
Marvin Rabe

Laravel 7.1+ üzerinden @env (['geliştirme', 'yerel', 'vb.']) Kullanabilirsiniz .... @endenv
James

20

ÇOK ÖNEMLİ

Tüm env () gibi: üretimde ÇALIŞMAYACAKenv('APP_ENV') çağrıları (kullandığınızdaphp artisan config:cache )

Ne kullanmalı?
- env ​​() 'i sadece yapılandırma dosyalarında
kullanın - ortamı kontrol etmek için App :: environment () kullanın (.env'de APP_ENV).
- diğer tüm ortam değişkenleri için config ('app.var') kullanın, örn. config ('app.debug')
- kendi ENV değişkenleriniz için kendi yapılandırma dosyalarını oluşturun. Örnek:
.env dosyanızda:

MY_VALUE=foo

örnek yapılandırma uygulaması / myconfig.php

return [
    'myvalue' => env('MY_VALUE', 'bar'), // 'bar' is default if MY_VALUE is missing in .env
];

Kodunuza erişin:

config('myconfig.myvalue') // will result in 'foo'

Daha fazla ayrıntı BURAYA bakın


1
Ne @ndberg burada diyor anahtardır: use env() only in config files. Bu sorunun en iyi cevabı budur.
Pathros

8

Uygulamanın ortamını almak istiyorsanız, şunu deneyin:

{{App::environment()}}

Diğer değişkenleri denemedim.


4

Env () 'i config / klasöründen başka bir yerde kullanmak sorunlara neden olur. Orada env kullanın ve ardından uygulamanın diğer bölümlerinde config ()



4

.envDeğerlere yalnızca doğrudan yapılandırma dosyalarının içinden erişmeli, ardından config()yardımcı kullanarak yapılandırma dosyalarından bunlara her yerden (denetleyiciler, görünümler) erişmelisiniz

Örneğin:

.env

TEST_URL=http://test

config / app.php

return [
   'test_url' => env('TEST_URL','http://default.url')
];

kaynaklar / views / welcome.blade.php

{{ config('app.test_url')}}

Daha fazla bilgi için laravel belgelerinden yapılandırma önbelleğe alma konusuna bakın .


4

Laravel 7.11'den beri , @env('')ve @production()direktiflerini blade şablonlarında kullanabilirsiniz:

@env('staging')
    // The application is running in "staging"...
@endenv

@env(['staging', 'production'])
    // The application is running in "staging" or "production"...
@endenv

veya

@production
    // Production specific content...
@endproduction

Laravel Blade Belgelerine de bakın .



1

değerleri buradan alın: config/app.php


blade'de:

{{ config('app.name', 'default value here') }}

sınıfta / denetleyicide:

config('app.name', 'default value here')

1

Aşağıdaki şekilde env doğrulanabilir hale getirebilirsiniz:

@if (env('APP_ENV')!='Production')
Enviroment Test
@endif

bağlantıya bakın


0

Değişkenlere kolay bir şekilde erişmek için .env dosyasını düzenledikten sonra bu komut yazılmalıdır.

php artisan config:cache

0

.env dosyasından değer elde etmekte de sorun yaşıyordum, sonra bunu yaptım ve yardımcı oldu:

  1. Env dosyasını kontrol edin ve doğru değeri verip vermediğinizi görün.
  2. daha sonra bu değişkeni .env dosyasından kullandığınız blade'i veya denetleyiciyi kontrol edin.
  3. Yukarıdaki her iki adım da doğru giderse, şu adımları uygulamanız yeterlidir -

php artisan config:
php artisan önbelleğini temizle:
php esnaf görünümünü temizle:
php artisan rotasını temizle:
composer dump-autoload temizle

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.