Drupal 8で独自の設定を定義して使用する
メインテーマ:独自の設定の定義
他のモジュールの機能(コンテンツタイプ、ビュー、フィールド、テキスト形式など)に基づいて、デフォルト設定をモジュールに含めることができます。
たとえば、ノードモジュールはコンテンツタイプの設定を提供するため、自分のモジュールでは、モジュールに付属させたいデフォルトのコンテンツタイプを設定します。
独自のプラグイン、エンティティ、設定用の設定を定義したい場合があります。これらは、ノードのコンテンツタイプ設定を使用できるのと同様に、他のモジュールでも使用できます。Drupal 8では、独自の設定部分の定義が簡単になっています。
設定ファイル
モジュールの設定ファイルは、モジュールのconfig/installサブディレクトリにあります。つまり、モジュールが/modules/exampleにある場合、/modules/example/config/install/example.settings.ymlになります。ここに、YAMLファイル形式を使用してモジュールの設定ファイルを配置できます。
強制ではありませんが、モジュール用に定義する設定ファイルには、モジュール自体の名前をプレフィックスとして使用することを強くお勧めします。たとえば、設定オプション用にexample.settings.ymlなどです。settings.ymlやsystem.settings.ymlと名付けると、他の場所のファイル名と競合する可能性があるため、避けてください。この規則に従わない場合、drush config:importなどのDrushコマンドが混乱する可能性があります。
これにより、他のコンポーネントの設定を提供することもできます。たとえば、デフォルト設定をモジュールに含める例のコンテンツタイプなどです。設定ファイルがnode.type.example_mytype.ymlの場合、そのファイルはノードモジュールによってコンテンツタイプとして処理されます。
設定ファイル名(.yml拡張子を除く)は、システム内の設定名とも呼ばれ、PHP APIから設定を参照する方法です。
設定ファイルの構造
設定ファイルはYAMLファイル形式を使用する必要があります。独自の設定ファイルはニーズに合わせて構造化できます。構造に関しては、YAML形式自体以外に制限はありません。たとえば、ページコントローラーから特別なものを出力するパラメーターが必要な場合、ファイルには文字列値を持つmessageキーを含めることができます:
message: 'Hello'
langcode: 'en'
langcodeキーの下にファイルの言語コードを含めることをお勧めします。これは、言語システムが翻訳用に翻訳可能なテキストを提案するために使用されます。langcodeキーはこの目的のために予約されているため、ファイルのトップレベルで他の目的に使用しないでください。
設定の翻訳には設定変換モジュールをインストールする必要があります。
設定を翻訳可能にするには、さらに2つのファイルを追加する必要があります:
- /modules/example/config/schema/example.schema.yml
- /modules/example/example.config_translation.yml
1つ目は、カスタム設定のスキーマを定義します。example.settingsを、いくつかのフィールドを含むconfig_objectオブジェクトとして定義します。各フィールドにはタイプがあります。基本タイプの定義によって、フィールドが翻訳可能かどうかが決まります(core.data_types.schema.ymlを参照)。たとえば、Drupalの内部パスを含むpathは翻訳できませんが、textは翻訳できます。
# /modules/example/config/schema/example.schema.yml
example.settings:
type: config_object
label: 'Example config'
mapping:
message:
type: text
label: 'Message'
2つ目は、対応する翻訳フォームへのリンクを/admin/config/regional/config-translationに追加します:
# /modules/example/example.config_translation.yml
example.admin.config:
title: 'Example module'
base_route_name: example.admin.config
names:
- example.settings
慣例により、キーはベースルート名と一致します。example.admin.configは、モジュールの管理者設定フォームへのルート名です。namesは、フォームで編集されるすべての設定キーを一覧表示します。この場合、カスタム設定は上記のスキーマで定義されています。
ファイルには、より複雑なリストやキー/値のペアをツリー構造で含めることができます。たとえば、少し複雑な設定ファイルの例については、views.view.content.ymlファイルを参照してください。
設定変換により、モジュールの設定フォームに「翻訳」タブが自動的に追加されますが、それが唯一の利用可能なタブである場合は表示されない場合があります。設定フォームの「デフォルト」タブを追加するには、example.links.task.ymlファイルをもう1つ追加する必要があります。(モジュール定義のローカルタスクを参照してください。)
// example.links.task.yml
example.admin.config:
route_name: example.admin.config
title: Settings
base_route: example.admin.config
設定の使用
Drupal 8には、この設定の読み書きを行うPHP APIが付属しています。最も簡単な使用方法は、Drupal::config()静的メソッドです:
$config = \Drupal::config('example.settings');
// Will print 'Hello'.
print $config->get('message');
// Will print 'en'.
print $config->get('langcode');
設定を編集して新しい値で更新したい場合は、\Drupal::service('config.factory')->getEditable()メソッドを使用できます:
$config = \Drupal::service('config.factory')->getEditable('example.settings');
// Set and save new message value.
$config->set('message', 'Hi')->save();
// Now will print 'Hi'.
print $config->get('message');