Beste Methode zum Umgang mit Variablen pro Umgebung

7

Ich habe ein benutzerdefiniertes Modul. Es ist FormBase, um ein Formular zu erstellen. Und beim Senden poste ich Werte an eine API. Das alles funktioniert. Ich möchte jedoch die Basis-URL-Variable (die in mehreren Methoden verwendet wird) so ändern, dass Sie in einer anderen Umgebung als live eine andere URL erhalten.

Ich möchte herausfinden, wie Drupal 8 dies tut.

class EventSuggestionForm extends FormBase {
  // Needs to be different if not the live site...
  private $baseUrl = 'https://www.example.com';
  private $apiUrl = '/api/v1/';
...

Kann ich einen Rat bekommen?

xpersonas
quelle

Antworten:

11

Sie können eine neue Einstellung in Ihrer settings.local.phpoder Ihrer settings.phpDatei erstellen, wie:

$settings['event_base_url'] = 'https://www.example.com';

oder einige Leute fügen Switch-Block basierend auf dem Server-Host hinzu, z.

switch (@$_SERVER['HTTP_HOST']) {
  default:
  case 'dev.example.com':
     $settings['event_base_url'] = 'http://dev.example.com';
     break;
  case 'stage.example.com':
     $settings['event_base_url'] = 'https://test.example.com';
     break;
  case 'www.example.com':
  case 'preprod.example.com':
     $settings['event_base_url'] = 'https://live.example.com';
     break;
}

Verweisen Sie dann im Code wie folgt:

use Drupal\Core\Site\Settings;
$baseUrl = Settings::get('event_base_url', '');

Ihr Code würde also so aussehen:

use Drupal\Core\Site\Settings;
class EventSuggestionForm extends FormBase {
  private $baseUrl;
  private $apiUrl = '/api/v1/';

  function __construct() {
    // Read value from the settings file.
    $this->$baseUrl = Settings::get('event_base_url', '');
  }
...

Ändern Sie dann diese Einstellung pro Umgebung in der Einstellungsdatei, ähnlich wie Sie unterschiedliche Datenbankanmeldeinformationen pro Umgebung haben. Dies ist das gleiche Konzept wie für den vorhandenen $settings['file_public_base_url']Parameter.

Kenorb
quelle
1
Siehe auch die Status-API, die für ähnliche Anwendungsfälle erstellt wurde
Clive
2
Oh, und Sie müssen $baseUrlim Konstruktor initialisieren , die Standardwerte für Eigenschaften müssen konstant sein
Clive
1
Ich habe mir vor dem Posten ein bisschen die State API angesehen. Ich habe den Teil gelesen, in dem es heißt: "Verwenden Sie also die Status-API, um vorübergehende Informationen zu speichern, die nach einem Zurücksetzen verloren gehen können." Ich war in einer Debatte, ob sich dies qualifizieren würde oder nicht. Ehrlich gesagt bin ich mir immer noch ein wenig unsicher.
Xpersonas
1
Beachten Sie, dass dort, wo Sie über den Status lesen und Daten verlieren, im Status gespeicherte Daten nicht verloren gehen und viele wichtige Informationen für Drupal gespeichert werden. Aber Einstellungen und alternativ Konfigurationsüberschreibungen durch settings.php sind definitiv viel besser dafür geeignet. Die Status-API ist hauptsächlich für Dinge gedacht, die Code intern verwaltet. Drupal verwendet sie beispielsweise zum Speichern der letzten Ausführung von cron. Oder ob der Wartungsmodus aktiviert ist oder nicht (dort ist es sinnvoll, weil er vorübergehend aktiviert und dann wieder deaktiviert wird und nicht pro Umgebung
gesteuert wird
Der Kommentar davor war für @xpersonas.
Kiamlaluno