Accesso alle variabili .env di Laravel in blade


89

Sto cercando di ottenere alcune chiavi API che ho memorizzato nel mio file .env da utilizzare nel javascript blade. Ho aggiunto due chiavi come:

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

In blade devo utilizzare l'API di Google Maps e la chiave API OverheidIO. Ho provato a ottenere una delle variabili .env predefinite nel caso in cui avessi formattato le variabili .env personalizzate in modo errato .:

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

Qualcuno potrebbe aiutarmi a chiamare l'api di google maps e l'api overheidio key nel blade?


12
Prova a correre php artisan config:cleare provare env('APP_ENV')in tinker. Per me restituisce localstringa.
Alexey Mezenin

Grazie Alexey! php artisan config:clearha fatto il trucco.
Anna Jeanine

@Alexey Mezenin, non va bene se pubblichi il tuo commento come risposta? Sono abbastanza nuovo nell'usare SO e non sono molto chiaro sulle regole.
manian


@YevgeniyAfanasyev quella domanda è un mio duplicato, l'ho fatta prima ...
Anna Jeanine

Risposte:


111

I cinque comandi più importanti se il tuo Laravel non funziona come previsto dopo alcune modifiche nella cartella .env o del database oa causa di altre modifiche. Ecco la spiegazione completa: 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
Esattamente il motivo a volte, Laravel 5.5 ha un sistema di memorizzazione nella cache difficile
Deepesh Thapa

2
roba buona, ma attenzione, ENV ( 'APP_ENV') falliranno nella produzione, vedere stackoverflow.com/a/57626957/4820095
ndberg

1
@ndberg che è quando usi il comando php artisan config:cachee io non lo sto usando. Si prega di leggere.
Studente

Ciao @ndberg, ho rivisto due volte la tua risposta a questa domanda (link nel commento sopra) e ti riferisci a php artisan config:cache@Learner menziona. MA, non sono sicuro se la risposta dello studente debba essere modificata per aggiungere il comando mancante o se hai commesso un errore. Per favore, chiariscilo.
Guillermo Garcia

@Learner ha ragione, non lo usa nella sua risposta e non è necessario. Ma volevo solo tracciare uno schema per tutti i googler: di solito in produzione, usiamo config: cache, e alla fine la chiamata usata nella domanda: "env ('APP.ENV')" porterà problemi. Quindi era solo un'aggiunta a questa risposta.
ndberg

32

L'ho implementato nel modo seguente:

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

La mia raccomandazione è di eseguire il seguente comando: composer self-update


2
Questo fallirà se la cache di configurazione è abilitata. Usa configinvece
ncatnow

2
Può essere scritto come@if(App::environment('production'))
Marvin Rabe

Da Laravel 7.1+, puoi usare @env (['development', 'local', 'etc etc']) .... @endenv
James

20

MOLTO IMPORTANTE

Tutte le env('APP_ENV')chiamate env () come: NON FUNZIONANO in produzione (quando usiphp artisan config:cache )

Cosa usare?
- usa env () solo nei file di configurazione
- usa App :: environment () per controllare l'ambiente (APP_ENV in .env).
- usa config ('app.var') per tutte le altre variabili env, es. config ('app.debug')
- crea i propri file di configurazione per le tue variabili ENV. Esempio:
nel tuo .env:

MY_VALUE=foo

esempio app di configurazione / myconfig.php

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

Accedi nel tuo codice:

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

Maggiori dettagli vedi QUI


1
Che @ndberg dice qui è la chiave: use env() only in config files. Questa è la migliore risposta a questa domanda.
Pathros

8

Se vuoi ottenere l'ambiente dell'app, prova questo:

{{App::environment()}}

Non ho provato altre variabili.


4

Causa problemi nell'usare env () altrove che nella cartella config /. Usa env lì e poi config () nelle altre parti dell'app



4

È necessario accedere solo ai .envvalori direttamente all'interno dei file di configurazione, quindi accedervi da qualsiasi luogo (controller, viste) dai file di configurazione utilizzando l' config()helper

Ad esempio:

.env

TEST_URL=http://test

config / app.php

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

risorse / visualizzazioni / welcome.blade.php

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

vedere la cache della configurazione dalla documentazione di laravel per maggiori informazioni.


4

A partire da Laravel 7.11 , puoi usare le direttive @env('')e @production()nei modelli blade:

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

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

o

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

Vedi anche nella documentazione di Laravel Blade .



2

ottieni i valori qui: config/app.php


in blade:

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

in classe / controllore:

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

1

Puoi diventare invidiabile nel modo seguente:

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

fare riferimento al collegamento


0

Questo comando dovrebbe essere scritto dopo aver modificato il file .env per accedere alle variabili in modo semplice

php artisan config:cache

0

Ho anche avuto problemi a ottenere valore dal file .env, quindi l'ho fatto e ha aiutato:

  1. Controlla il file env e verifica se hai fornito il valore corretto.
  2. quindi controlla il blade o il controller in cui stai utilizzando quella variabile dal file .env.
  3. se entrambi i passaggi precedenti vanno bene, devi solo eseguire questi passaggi:

configurazione php artisan: cancella
cache artisan php: cancella
vista artisan php: cancella
percorso artisan php: clear
composer dump-autoload

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.