web-dev-qa-db-ja.com

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

カスタムモジュールがあります。フォームを作成するのは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/';
...

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

7
xpersonas

次のように、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']パラメータに使用されている概念と同じです。

11
kenorb