Frage Was ist der Unterschied zwischen use env ('APP_ENV'), config ('app.env') oder App :: environment (), um eine App-Umgebung zu erhalten?


Was ist der Unterschied zwischen der Nutzung? env('APP_ENV'), config('app.env') oder App::environment() um App-Umgebung zu bekommen?

Ich weiß, dass das env('APP_ENV') werde zu $_ENV, config('app.env') liest die Konfiguration und App::environment() ist eine Abstraktion von allen. Und meiner Meinung nach ist der Vorteil sogar das. Abstraktion.

Ich weiß nicht, ob es andere Unterschiede gibt, wie zum Beispiel das Leistungsniveau oder die Sicherheit


5
2017-10-13 16:57


Ursprung


Antworten:


Ich habe gerade darüber gefühlt. Wenn Sie Ihre Konfigurationsdatei zwischenspeichern, wird env () (manchmal?) Nicht richtig funktionieren. Also was ich herausgefunden habe:

  1. Laravel empfiehlt, nur env () innerhalb der Konfigurationsdateien zu verwenden. Verwenden Sie den Helfer config () in Ihrem Code anstelle von env (). Zum Beispiel können Sie config ('app.env') in Ihrem Code aufrufen.
  2. Wenn Sie php artisan config: cache verwenden, werden alle Konfigurationszeichenfolgen vom Framework zwischengespeichert und alle Änderungen, die Sie an Ihrer .env-Datei vornehmen, werden erst aktiv, wenn Sie den Befehl php artisan config: cache erneut ausführen.

Von hier: https://laracasts.com/discuss/channels/general-discussion/env-not-reading-variables- manchmal

AKTUALISIEREN:
env () -Aufrufe funktionieren, solange Sie nicht php artisan config: cache verwenden. Es ist also sehr gefährlich, weil es oft während der Entwicklung funktioniert aber wird bei der Produktion scheitern. Siehe Upgrade-Anleitung: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

UPDATE Laravel 5.6:
Laravel empfiehlt jetzt in seinem Dokumentation benutzen

$environment = App::environment();

und beschreibt Das env () dient nur zum Abrufen von Werten aus .env in Konfigurationsdateien. Aber das ist nur für config ('app.env') und funktioniert nicht für andere Variablen wie config ('app.debug').


8
2018-02-22 13:48



Eine Sache, die man beachten sollte, ist vielleicht der Bequemlichkeitsfaktor beim Übergeben von String an app()->environment() um deine aktuelle Umgebung zu validieren.

// or App:: whichever you prefer.
if (app()->environment('local', 'staging')) {
    logger("We are not live yet!");
    Seeder::seedThemAll();
} else {
    logger("We are LIVE!");
}

1
2017-10-14 08:43



Sie haben zwei gleich gute Möglichkeiten

if (\App::environment('production')) {...}

oder

if (app()->environment('production')) {...}

app () -> environment () wird tatsächlich von verwendet Bugsnag, siehe Dokumentation Hier es sagt

Standardmäßig erkennen wir die App-Umgebung automatisch, indem wir die Funktion environment () in Laravels Anwendungsinstanz aufrufen.


0
2018-02-03 03:45



Wenn Sie das verwenden config:cache Während der Bereitstellung müssen Sie sicherstellen, dass Sie nur die env Funktion von innerhalb Ihrer Konfigurationsdateien und nicht von irgendwo sonst in Ihrer Anwendung.

Wenn Sie in Ihrer Anwendung env aufrufen, wird dringend empfohlen, dass Sie Ihren Konfigurationsdateien korrekte Konfigurationswerte hinzufügen und stattdessen env von diesem Standort aus aufrufen, damit Sie Ihre Daten konvertieren können env Anrufe zu Config-Anrufen.

Fügen Sie Ihrem System eine env Konfigurationsoption hinzu app.php Konfigurationsdatei, die wie folgt aussieht:

'env' => env('APP_ENV', 'production'),

Mehr: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0


0
2018-04-12 08:12