2017-05-02 2 views
5

ich planen etwas wie zu tun, die festlegen, was env-Datei während der Anwendung Bootstrap-Zeit zu laden, indem Sie eine Variable in .env.master wie ENV_VER Schaffung = dev.envLaravel 5 Lade Env-Datei basierend auf .env.master?

Das ist, weil ich mehrere Filialen haben wie development, release-1.1 und usw. Durch das Laden der env-Datei basierend auf dem in einer Master-env-Datei angegebenen Namen müssen Entwickler nicht mehr neue Variablen in ihre lokale Kopie von .env kopieren und einfügen, sondern einfach angeben, welche Version von env-Datei zum Laden in die Master-Env-Datei. By the way, habe ich mehrere env-Dateien wie dev.env, 1.6.env usw.

Ist es möglich?

+0

Nicht sicher über Ihr Problem, aber ich verwende Kommentare in .env-Datei für den gleichen Zweck, überprüfen Sie [diese Frage] (http://stackoverflow.com/questions/32368016/how-to-comment-in-laravel-env (Datei) –

+0

Es war nicht das, was ich suche, aber danke für Ihre Antwort sowieso. – AlexZai

Antwort

4

Definitiv, ich selbst Ich neige dazu, ein Framework ein wenig zu "biegen" und es gibt immer einen Weg, nicht immer die beste Lösung. Ich gebe hier nicht eine ganze Implementierung, nur in eine Richtung zeigend, das könnte für dich funktionieren.

Sie können Laravel der Basisanwendungsklasse Illuminate\Foundation\Application, die enthält $environmentFile Variable Speicherumgebung Datei geladen während appplication Bootstrap oder möglicherweise überschreiben Funktion loadEnvironmentFrom($file) oder environmentFile() verlängern. Die ganze Logik liegt bei dir.

Also im Grunde alles was Sie brauchen, um zu tun, der Lage sein, zu „spielen“ mit .env Laden ist ...

eine neue Anwendungsklasse anlegen erstreckt Laravel eint:

namespace MyNamespace; 
... 

use Illuminate\Foundation\Application as App; 

/** 
* I'm doing alots of magic with .env in this class 
*/ 
class Application extends App 
{ 
    ... 

    /** 
    * The environment file to load during bootstrapping. 
    * 
    * @var string 
    */ 
    protected $environmentFile = '.env.main'; 

    ... 
} 

Und jetzt, weil wir eine neue bootstraping Klasse haben, müssen wir Laravel sagen, wir wollen es verwenden. Sie müssen also bootstrap/app.php Datei in Punkt ändern, wenn eine neue Instanz erstellt wird:

... 
$app = new MyNamespace\Application(
    realpath(__DIR__.'/../') 
); 
... 

Hinweis: Für Inspiration, die ich wirklich empfehlen Ihnen, zu betrachten Illuminate\Foundation\Application Klasse.

+0

Das sollte funktionieren ... Daumen hoch @Ivo Hrádek –

+0

Ja, das war so nah dran, was ich machen wollte. Zusätzlich habe ich auch hier verwiesen: http://developers.ph/laravel-framework/laravel-5/how-to-setup-multiple-environment-for-laravel-5-developers-way/ – AlexZai