Drupal 8開発者の構成管理の概要

Drupal 8には多くの改善があり、私のお気に入りは構成管理です。 このトピックについて簡単に確認してみます。

このレビューはDrupal 8ベータ3のリリース中に書かれたことを覚えておいてください。何か変更される可能性があります。

Drupal 8の情報の種類


公式文書によると、4種類の情報があります。
  1. 内容
  2. セッション
  3. 都道府県
  4. 構成

良いニュースは、コンテンツ以外のほとんどすべてが構成であるということです。モジュールの設定、そのステータス、ブロック、ブロックの配置、コンテンツのタイプ、フィールド、表示モードなどです。 この情報はすべて、構成のインポート中に処理されます。 これにより、展開プロセスが非常に簡単になります。

設定が保存される場所


新しくインストールしたDrupal 8のsettings.phpファイルを見てみましょう。

 $config_directories['active'] = 'sites/default/files/config_XXXX/active'; $config_directories['staging'] = 'sites/default/files/config_XXXX/staging'; 

ここで、 XXXXは、Webからのアクセスから構成を保護するために生成された長いハッシュです。

activeディレクトリとは、現在の構成を保存することです。 デフォルトではこのディレクトリは空であり、現在の構成はデータベースに保存されるため、「暗黙的」と言いました。 これは、 セキュリティとパフォーマンス上の理由によるものです。 ただし、 構成ツールモジュール(config_tools)を使用してこの動作を変更できます。 ( すべてのためのモジュールがあることを覚えていませんか?;))

stagingディレクトリは、構成のインポート元/同期元です。 このディレクトリは、構成をインポート/エクスポートするオプションを使用しない場合も空です。

ヒント:Git


sites/default/filesディレクトリは、ほとんどの場合.gitignoreファイルに含まれており、Gitによって無視されますが、設定ファイルをバージョン管理システムの制御下に置くことをお勧めします。 構成ディレクトリを配置する推奨方法は、Drupalがインストールされているディレクトリの外にあるため、Webからアクセスできません。 そして、最も簡単な方法は、構成ディレクトリをsites/defaultディレクトリに移動することsites/default (ただし、セキュリティのために名前にハッシュを残しsites/default )。

統合されたユーザーインターフェイス


すぐに使えるDrupalとともに、Configuration Managerモジュール(config)が(標準プロファイルに)インストールされます。これは、構成管理の基本UIを提供します。 admin/config/development/configuration 。 ここでは、「完全なインポート/エクスポート」タブが最も重要です。 完全なサイト構成は、エクスポートサブタブで.tar.gzアーカイブとしてエクスポートできます。 次に、そのようなアーカイブを使用して、サイトの別のインスタンスに構成をインポートできます。
画像
このインターフェースを使用する場合、インポートされた構成ファイルはロード直後には使用されず、 stagingディレクトリに展開されます。 次に、[同期]タブで同期を開始する必要があります。このタブでは、行った変更を表示することもできます。
画像
以上です! 展開はすぐに使用できるようになりました。 これ以上の追加ツールは必要ありません!

UIを使用したくない場合、Drushはいつものようにサービスにあります。

 drush config-export #      staging drush config-import #     staging 

測定単位の構成


エクスポートされた構成の例を見てみましょう。

 #ファイル:system.site.yml
 uuid:c78fd9aa-b327-4514-9d00-bc72a1f40f27
名前:「マイクールサイト」
 mail:mailbox@example.com
スローガン:「Drupal 8ルール!」
ページ:
  403: ''
  404: ''
 フロント:ノード
 admin_compact_mode:false
 weight_select_max:100
 langcode:en

ここで、構成の名前はsystem.siteです。 これは、構成の測定単位です。 すべての構成名の先頭には、モジュールまたはテーマの名前、この場合はsystemです。
ファイルの内容は、通常のPHP配列と構造が非常に似ています。 また、コードから構成を操作するときは、実際に配列を使用します。

ヒント:ベストプラクティス


モジュール/テーマに多くの設定がない場合、your_module_name.settingsという名前で同じ設定に保存することをお勧めします。

モジュールまたはテーマの構成を操作する


Drupal 8は非常に優れた構成APIを提供します。 コードを見てください。

 $config = \Drupal::config('system.site'); // Instance of Drupal\Core\Config\Config $front_page = $config->get('page.front'); // 'node' $page_settings = $config->get('page'); // array( // '403' => '', // '404' => '', // 'front' => 'node', // ) $config->set('page.front', 'my-front-page'); $config->save(); 

とても簡単ですよね? ほとんどの設定方法は、 Drupal \ Core \ Config \ Configクラスにあります。 その他の例は、開発者向けドキュメントのSimple Configuration APIセクションにもあります。

デフォルト値


Drupal 7でデフォルトの変数値を指定した方法を覚えていますか?

 $value = variable_get('my_variable_name', 'my_default_value'); 

Drupal 8では、デフォルト値はコード全体に散らばりません。 設定がある場合は、モジュールのインストール時にデフォルト値を設定します。 これを行うには2つの方法があります。
  1. 最も簡単なオプション:YAMLファイルをモジュールのconfig/installディレクトリに配置します。
  2. モジュールのインストール中にデフォルト値を動的に計算する必要がある場合は、 hook_install()使用します。

contact.form.feedback.ymlファイルのComment:モジュールで例を見つけることができます。 recipients値は空の配列に設定されます。 次に、 contact_install()で、実際の値が設定されます。

構成をモジュールにエクスポート


config/installディレクトリについて興味深い点が1つあります。

Drupal 7では、さまざまな機能をモジュールのコードにエクスポートできます。 一般的な例:モジュールの管理インターフェイスのビュー。 これを行うには、Views APIの基本的な知識、フック、コピーペーストが必要です。 機能モジュールもこのすべてに役立ちます。

Drupal 8を使用すると、作業がずっと簡単になります。 ビューの例:
  1. ビューを作成する
  2. サイト構成のエクスポート
  3. エクスポートされた構成でビューのYAMLファイルを見つけます(例: views.view.my_cool_view.yml
  4. このファイルをモジュールのconfig/installディレクトリに配置します

出来上がり! モジュールがインストールされると、ビューが自動的にインポートされます。

設定を上書きする


Drupalの最も優れた機能の1つは、コアおよびサードパーティのモジュールに触れることなくすべてを変更(置換)できることです。 構成も例外ではありません。

構成のオーバーライドには2つのタイプがあります。

settings.phpからの置換(設定のオーバーライド)


settings.phpファイルは、環境レベルで構成をオーバーライドできます。 Drupal 7で開発サーバーからメールを送信することを禁止した方法を思い出してください。

 $conf['mail_system']['default-system'] = 'DevelMailLog'; 

Drupal 8でもほとんど同じように見えます。

 $config['system.mail']['interface']['default'] = 'devel_mail_log'; 

モジュールのオーバーライド


モジュールの構成を動的に置き換えることができます。 このために、タグconfig.factory.overrideを使用し、 ConfigFactoryOverrideInterfaceクラスを実装するサービスがConfigFactoryOverrideInterfaceます。 構成に保存されているいくつかの行を翻訳する言語モジュールで例を見つけることができます(したがって、 Drupal::config(...)->get(...)を呼び出すと、実際に元の行ではなく翻訳された行を取得します) 。

初期(上書きされない)構成の取得


初期設定が必要な場合があります。 これは主に設定フォームに必要です(たとえば、ユーザーが翻訳ではなくソース行を変更できるようにするため)。 この場合、DrupalコアはConfigFormBaseクラスを提供します。これは、標準のFormBase代わりに使用する必要があります。 ConfigFormBase::config()メソッドがあります。このメソッドは元の構成を返し、通常のDrupal::config()代わりに使用する必要があります。

別の方法は、 Config::getRawData()メソッドです。 さらに複雑なケースについては、 ConfigFormBaseTrait::config() メソッドの実装を ConfigFormBaseTrait::config()

ヒント:ベストプラクティス


基本クラスを拡張するクラスから作業する場合、自由に使用できるすべてのメソッド(親クラスからアクセス可能)を調べ、グローバルにアクセス可能なメソッドの代わりにそれらを使用します。 上記の例は、 ConfigFormBase子クラスから作業するときに::config()メソッドを使用して元の構成を取得する方法を示しています。 別の例:多くのクラスには組み込みメソッド::t()があり、グローバル関数t()代わりに使用する必要があります。 これには常に理由があります; 例を見てください。

構成の変更に対応します


2つの方法があります。
  1. ConfigEventsクラスに記載されているイベントをサブスクConfigEventsします( ドキュメント )。 例として、 Drupal\language\EventSubscriber\ConfigSubscriberdocumentation )の実装を見てDrupal\language\EventSubscriber\ConfigSubscriber
  2. より複雑な場合には、 hook_config_import_steps_alter()使用できます。 例はFieldモジュールにあります。

構成スキーマ/メタデータ


構成スキーマを使用して構成を記述できるため、Drupalが理解できるようになります。 例から始めましょう。

 #ファイル:core / modules / system / config / install / system.maintenance.yml
メッセージ: '!サイトは現在メンテナンス中です。 まもなく戻ってくるはずです。 しばらくお待ちください。」
 langcode:en  
 
 #ファイル:core / modules / system / config / schema / system.schema.yml
 system.maintenance: 
 タイプ:マッピング  
 ラベル:「メンテナンスモード」
 マッピング: 
   メッセージ: 
     タイプ:テキスト  
      label:「メンテナンスモードのときに表示するメッセージ」
    langcode: 
     タイプ:文字列  
     ラベル:「デフォルト言語」
 
 #ファイル:core / config / schema / core.data_types.schema.yml
テキスト: 
 タイプ:文字列  
 ラベル:「テキスト」
 翻訳可能:true  
 #...
文字列: 
 クラス: '\ Drupal \ Core \ TypedData \ Plugin \ DataType \ String
 ラベル: 'String'

このデータから、 system.maintenance構成に保存されている設定の目的とそのタイプを見つけることができます。
  1. messageは、サイトメンテナンスモードで表示される翻訳に利用可能な行です
  2. langcodeは、サイトメンテナンスモードに使用される言語を示す文字列です

しかし、もっと重要なのは、Drupalと他のモジュールもこの情報を取得できることです。

Drupalコアには非常に多くのデータ型が組み込まれており、既存のデータ型を展開してデータ型を作成できます。 詳細については、開発者向けドキュメントの構成スキーマ/メタデータのセクションをご覧ください。

ヒント:翻訳


translatableプロパティは、文字列データ型を翻訳可能としてマークするために使用されます。 このような行は、言語モジュールによって自動的に処理されます。 おそらく使用したい2つの主要な「翻訳可能な」タイプの文字列があります。
  1. label :マークアップなしの人間が判読可能な行で、1行のテキストのみを含む
  2. text :人間が読める文字列。HTMLマークアップと数行のテキストが含まれる場合があります

構成エンティティ


つまり、構成エンティティは、構成として格納されるエンティティです。 したがって、最初にEntity APIのドキュメントを読むことをお勧めします。 簡単な例については、開発者向けドキュメントの記事「 Drupal 8での構成エンティティタイプの作成」を参照してください。 また、基本的な知識があり、さらに知識が必要な場合は、ImageモジュールのImageStyleエンティティに慣れることができます。

最後に


構成管理イニシアチブを始めた人々と、Drupal 8でこのような素晴らしい機能を作成するために一生懸命働いたすべてのDrupalistsに感謝します。彼らの仕事の結果は素晴らしいです!

PS:構成に役立つモジュールが既にいくつかあります。

PSS:開発者向けドキュメントの構成管理セクションは、すぐに始めるのに最適な場所です。 ただし、その一部は古く、(安定版リリースのリリースまで)現実に対応していないため、注意してください。

Source: https://habr.com/ru/post/J248629/


All Articles