2015-08-31 3 views

Antwort

16

Es gibt keine eingebaute Möglichkeit, das zu tun. Wenn Sie wirklich den Inhalt der .env Datei ändern wollen, müssen Sie eine Art von String ersetzen in Kombination mit PHP-Datei schreiben Methoden verwenden. Für einige Inspiration, sollten Sie einen Blick auf das key:generate Kommando übernehmen: KeyGenerateCommand.php:

$path = base_path('.env'); 

if (file_exists($path)) { 
    file_put_contents($path, str_replace(
     'APP_KEY='.$this->laravel['config']['app.key'], 'APP_KEY='.$key, file_get_contents($path) 
    )); 
} 

Nach dem Dateipfad aufgebaut wird und die Existenz geprüft wird, ersetzt der Befehl einfach APP_KEY=[current app key] mit APP_KEY=[new app key]. Sie sollten in der Lage sein, denselben Zeichenfolgenaustausch mit anderen Variablen durchzuführen.
Last but not least wollte ich nur sagen, dass es nicht die beste Idee ist, Benutzer die .env-Datei ändern zu lassen. Für die meisten benutzerdefinierten Einstellungen würde ich empfehlen, sie in der Datenbank zu speichern. Dies ist jedoch offensichtlich ein Problem, wenn die Einstellung selbst für die Verbindung mit der Datenbank erforderlich ist.

1

Ich hatte das gleiche Problem und haben die Funktion unter

public static function changeEnvironmentVariable($key,$value) 
{ 
    $path = base_path('.env'); 

    if(is_bool(env($key))) 
    { 
     $old = env($key)? 'true' : 'false'; 
    } 

    if (file_exists($path)) { 
     file_put_contents($path, str_replace(
      "$key=".$old, "$key=".$value, file_get_contents($path) 
     )); 
    } 
} 
+0

$ alt könnte undefiniert sein – sgotre

1

Noch eine weitere Implementierung, falls erstellt haben Sie so etwas wie:

A = B #Dies ist ein gültiger Eintrag

In Ihrer .env-Datei

public function updateEnv($data = array()) 
{ 
    if (!count($data)) { 
     return; 
    } 

    $pattern = '/([^\=]*)\=[^\n]*/'; 

    $envFile = base_path() . '/.env'; 
    $lines = file($envFile); 
    $newLines = []; 
    foreach ($lines as $line) { 
     preg_match($pattern, $line, $matches); 

     if (!count($matches)) { 
      $newLines[] = $line; 
      continue; 
     } 

     if (!key_exists(trim($matches[1]), $data)) { 
      $newLines[] = $line; 
      continue; 
     } 

     $line = trim($matches[1]) . "={$data[trim($matches[1])]}\n"; 
     $newLines[] = $line; 
    } 

    $newContent = implode('', $newLines); 
    file_put_contents($envFile, $newContent); 
} 
1

Aktualisieren Ericks Antwort mit Berücksichtigung von $old Werte für Stich-, Bool- und Nullwerte.

public static function changeEnvironmentVariable($key,$value) 
{ 
    $path = base_path('.env'); 

    if(is_bool(env($key))) 
    { 
     $old = env($key)? 'true' : 'false'; 
    } 
    elseif(env($key)===null){ 
     $old = 'null'; 
    } 
    else{ 
     $old = env($key); 
    } 

    if (file_exists($path)) { 
     file_put_contents($path, str_replace(
      "$key=".$old, "$key=".$value, file_get_contents($path) 
     )); 
    } 
} 
Verwandte Themen