環境ごとの変数を処理する最良の方法


7

カスタムモジュールがあります。フォームを作成するのはFormBaseです。送信時に、値をAPIに投稿します。これはすべて機能します。しかし、ベースURL変数(複数のメソッドで使用されます)を変更して、ライブ以外の環境で別のURLを取得できるようにします。

これを行うDrupal 8の方法を理解したいと思います。

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

アドバイスはありますか?

回答:


11

settings.local.phpまたはsettings.phpファイルに次のような新しい設定を作成できます。

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

または一部の人々はサーバーホストに基づいてスイッチブロックを追加しています、例えば:

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;
}

次に、次のようなコードで参照します。

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

したがって、コードは次のようになります。

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', '');
  }
...

次に、設定ファイルで環境ごとにこの設定を変更します。環境ごとにデータベース資格情報が異なる場合と同様です。これは、既存の$settings['file_public_base_url']パラメーターに使用されている概念と同じです。


1
同様のユースケース用に作成されたState APIも参照してください
Clive

2
ああ、あなたは$baseUrlコンストラクタで初期化する必要があります、プロパティのデフォルト値は一定で
Clive

1
実際に投稿する前に、State APIを少し調べました。「そのため、State APIを使用して一時的な情報を保存します。リセット後に失われても問題ありません。」これがそれに当てはまるかどうかに基づいて、私は少し議論しました。正直なところ、まだ少しわかりません。
xpersonas 2017

1
状態について読んでデータを失う場所に注意してください。状態に格納されたデータ失われません。Drupalが機能するための非常に重要な情報がそこに格納されます。しかし、settings.phpを使用した設定および代わりの設定オーバーライドは、これに間違いなくはるかに適しています。State APIは主にコードが内部的に管理するものに使用されます。たとえば、Drupalはこれを使用して前回cronが実行された時間を保存します。または、メンテナンスモードが有効かどうか(一時的に有効にしてから再度無効にするものであり、環境ごとに制御するものではないため、理にかなっています
Berdir

この前のコメントは@xpersonasに対するものでした。
kiamlaluno
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.