2017-06-19 1 views
4

Laravel upgrade documentation 5,2-5,3 gibt die folgenden:Warum wird "dringend empfohlen", den Helfer env() nicht zu verwenden, wenn Konfigurationsdateien zwischengespeichert werden?

Caching und env

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

Wenn Sie env aus Ihrer Anwendung aufrufen, wird nachdrücklich empfohlen, empfohlen, dass Sie die richtige Konfiguration Werte Ihrer Konfiguration Dateien hinzufügen und rufen env von diesem Ort statt, so dass Sie Ihre env Anrufe konvertieren Anrufe config .

Die Frage, die die Dokumentation nicht beantwortet, ist: warum?

Sollten nicht die env() Helfer, wenn innerhalb der Anwendung, noch ordnungsgemäß verwendet arbeiten? Kann ich nicht noch env() verwenden, nachdem die Konfiguration im Cache gespeichert wurde, anstatt gezwungen zu sein, sie in meinem gesamten Projekt zu finden und durch den Helfer config() zu ersetzen, wie (indirekt) von den Dokumenten vorgeschlagen?

Zum Beispiel, wenn ich dies habe in meinem app.php:

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

und es wird mit config:cache zwischengespeichert, aber ich immer noch die env() Helfer irgendwo im Code verwenden, dann ist es eine Grund überhaupt, dass env('APP_ENV') mir etwas anderes geben würde als die config('app.env')?

Und wie wäre es mit dem App::environment() Anruf - wird es auch nicht empfohlen, nachdem config:cache auf Produktion verwendet wird?

Antwort

0

Da alle Konfigurationsdateien in bootstrap/cache/ zwischengespeichert wurden. Verwenden Sie config(), nicht env(). In den Konfigurationsdateien wie config/app.php müssen Sie env() verwenden.

Beispiel:

env('app.name') -> config('app.name') 
2

Dies liegt daran, wie Caching in Laravel funktioniert, haben Sie einen storage/cache Ordner, in dem eine „kompilierte“ Version Ihrer Konfigurationsdateien gespeichert, wenn Sie den php artisan config:cache Befehl verwenden, so dass es ist leichter und schneller. In diesem Caching-Prozess liest Laravel die Datei .env und ersetzt alle Werte mithilfe derHilfsfunktion.

Jetzt, um auf die kompilierte Version der Config zuzugreifen, die normalerweise bereits im Speicher ist, müssen Sie die config() Helfer verwenden, sonst würden Sie auf eine Datei zugreifen, ein viel langsamer Ansatz.

Der Grund für die Deaktivierung der env()-Funktion, nachdem Sie Ihre Konfigurationen zwischengespeichert haben, besteht darin, die Leistung in der Produktionsumgebung zu gewährleisten, da angenommen wird, dass die Kompilierung stattfindet.

Fazit, es ist die Entscheidung des Herstellers, Sie mögen es oder nicht, IMO macht es die Dinge ein bisschen sauberer und zwingt Sie zu einer optimierten und organisierten Anwendung.

Hoffe das hilft dir.

+0

Hallo, ich verstehe das Caching-Konzept, es ist definitiv gut zu verwenden, aber die eigentliche Frage ist: Warum verhindern die Docs den 'env()' Helfer direkt nach dem die Konfiguration zwischengespeichert wird? Was ist der Grund dafür? Selbst wenn config gecached wird, sollte der Helfer 'env()' immer noch direkt auf die Datei **. Env ** zugreifen. Wenn das der Fall ist, was ist das Problem mit 'env()'? Und wenn es wirklich keine gibt, warum wird dann vorgeschlagen, all diese 'env()' Vorkommnisse zu finden und sie gegen 'config()' zu tauschen? – lesssugar

+0

@lesssugar Das liegt daran, dass 'config: cache' für die Produktion gedacht ist. Ist ein Weg, um eine gute Leistung in dieser Umgebung zu garantieren. – Asur

Verwandte Themen