Dostęp do zmiennych Laravel .env w blade

86

Próbuję uzyskać klucze API, które zapisałem w moim pliku .env do wykorzystania w javascript blade. Dodałem dwa klucze takie jak:

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

W blade muszę użyć Google Maps API i OverheidIO API key. Próbowałem uzyskać jedną z domyślnych zmiennych .env na wypadek, gdyby źle sformatowałem niestandardowe zmienne .env .:

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

Czy ktoś mógłby mi pomóc zadzwonić do Google Maps API i klucza overheidio api w ostrzu?

Anna Jeanine
źródło
12
Spróbuj uruchomić php artisan config:cleari przetestować env('APP_ENV')w majsterkowaniu. U mnie zwraca localstring.
Alexey Mezenin
Dziękuję Alexey! php artisan config:clearzałatwił sprawę.
Anna Jeanine
@Alexey Mezenin, czy nie będzie dobrze, jeśli opublikujesz swój komentarz jako odpowiedź ?. Jestem całkiem nowy w używaniu SO i nie bardzo wiem, jakie są zasady.
manian
Możliwy duplikat Laravel 5.3 - env ​​() zawsze zwraca wartość null
Yevgeniy Afanasyev
@YevgeniyAfanasyev to pytanie jest powtórzeniem mojego, zadałem je wcześniej ...
Anna Jeanine

Odpowiedzi:

109

Pięć najważniejszych poleceń, jeśli Twój Laravel nie działa zgodnie z oczekiwaniami po pewnych modyfikacjach w .env lub folderze bazy danych lub z powodu innych modyfikacji. Oto pełne wyjaśnienie: 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
Uczeń
źródło
1
Dokładnie dlatego czasami Laravel 5.5 ma twardy system buforowania
Deepesh Thapa
2
dobre rzeczy, ale uwaga, env ('APP_ENV') nie powiedzie się w produkcji, zobacz stackoverflow.com/a/57626957/4820095
ndberg
1
@ndberg to jest, gdy używasz polecenia, php artisan config:cachea ja go nie używam. Proszę przeczytaj.
Uczeń
Cześć @ndberg, dwukrotnie przejrzałem twoją odpowiedź na to pytanie (link w komentarzu powyżej) i php artisan config:cacheodnosisz się do wzmianki o @Learner. ALE, nie jestem pewien, czy odpowiedź ucznia wymaga edycji, aby dodać brakujące polecenie, czy też popełniłeś błąd. Proszę, wyjaśnij to.
Guillermo Garcia
@ Uczeń ma rację, nie używa go w swojej odpowiedzi i nie jest to potrzebne. Ale chciałem tylko nakreślić dla wszystkich pracowników Google: zwykle w środowisku produkcyjnym używamy config: cache i ostatecznie wywołanie w pytaniu: „env ('APP.ENV')” przyniesie problemy. Więc to był tylko dodatek do tej odpowiedzi.
ndberg
29

Mam to zaimplementowane w następujący sposób:

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

Zalecam wykonanie następującego polecenia: composer self-update

Armando Cordova
źródło
1
To się nie powiedzie, jeśli jest włączone buforowanie konfiguracji. Użyj configzamiast tego
ncatnow
1
Można zapisać jako@if(App::environment('production'))
Marvin Rabe
15

BARDZO WAŻNE

Wszystkie env (), takie jak: env('APP_ENV')wywołania NIE DZIAŁA w środowisku produkcyjnym (gdy używasz php artisan config:cache)

Czego używać?
- użyj env () tylko w plikach konfiguracyjnych
- użyj App :: environment () do sprawdzenia środowiska (APP_ENV w .env).
- użyj config ('app.var') dla wszystkich innych zmiennych env, np. config ('app.debug')
- utwórz własne pliki konfiguracyjne dla własnych zmiennych ENV. Przykład: w
Twoim .env:

MY_VALUE=foo

przykładowa aplikacja config / myconfig.php

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

Dostęp w swoim kodzie:

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

Więcej szczegółów TUTAJ

ndberg
źródło
Co @ndberg mówi tutaj jest klucz: use env() only in config files. To najlepsza odpowiedź na to pytanie.
Pathros
8

Jeśli chcesz uzyskać środowisko aplikacji, spróbuj tego:

{{App::environment()}}

Nie próbowałem innych zmiennych.

Jnanaranjan
źródło
4

Powoduje to problemy z użyciem env () gdziekolwiek indziej niż w folderze config /. Użyj env w tym miejscu, a następnie config () w innych częściach aplikacji

Alex
źródło
4

Należy uzyskiwać dostęp do .envwartości bezpośrednio w plikach konfiguracyjnych, a następnie uzyskiwać do nich dostęp z dowolnego miejsca (kontrolery, widoki) z plików konfiguracyjnych za pomocą config()pomocnika

Na przykład:

.env

TEST_URL=http://test

config / app.php

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

resources / views / welcome.blade.php

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

zobacz buforowanie konfiguracji z dokumentacji laravel, aby uzyskać więcej informacji.

medard mandane
źródło
3
php artisan config:clear

powinien to naprawić

Luca C.
źródło
3

Oto link do dokumentacji: https://laravel.com/docs/6.x/configuration#retrieving-environment-configuration

W poniższym przykładzie wypluwam rzeczywisty błąd, gdy jestem w swoim środowisku programistycznym, ale podaję ogólny komunikat, jeśli jestem w jakimkolwiek innym środowisku.

@if(App::environment('development'))
    Error: {{ $record->s_error }}
@else
    XML Parsing Error - Please double check that your file is formatted correctly.
@endif
JR Lawhorne
źródło
1

pobierz wartości tutaj: config/app.php


w ostrzu:

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

w klasie / kontroler:

config('app.name', 'default value here')
Mhar Daniel
źródło
0

To polecenie powinno zostać napisane po edycji pliku .env, aby uzyskać łatwy dostęp do zmiennych

php artisan config:cache
Ahmed Mahmoud
źródło
0

miałem również problem z uzyskaniem wartości z pliku .env, a potem zrobiłem to i pomogło:

  1. Sprawdź plik env i zobacz, czy podałeś poprawną wartość.
  2. następnie sprawdź kasetę lub kontroler, gdzie używasz tej zmiennej z pliku .env.
  3. jeśli oba powyższe kroki przebiegną prawidłowo, wystarczy wykonać następujące czynności -

Konfiguracja php artisan: wyczyść
pamięć podręczną php artisan: wyczyść
widok
php artisan: wyczyść trasę php artisan: wyczyść
zrzut autoloada kompozytora

ABHISHEK SHUKLA
źródło
0

Środowisko można uzyskać w następujący sposób:

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

patrz odnośnik

hammad khan
źródło
0

Od Laravel 7.11 możesz używać dyrektyw @env('')i @production()w szablonach blade:

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

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

lub

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

Zobacz także w dokumentacji Laravel Blade .

Attila Fulop
źródło