設定エンティティの依存関係
設定エンティティは依存関係を宣言できます。依存関係は、モジュール、テーマ、またはエンティティです。
設定エンティティをインストールするには、その依存関係を先にインストールする必要があります。依存関係がサイトに存在しない場合、設定エンティティはインストールに失敗します。モジュールは、その設定エンティティが必要とするモジュールとテーマの依存関係を、infoモジュールのYAMLファイルで宣言する必要があります。
一般に、モジュール開発者は設定エンティティの依存関係の宣言を気にする必要はありません。コアの設定エンティティ基本クラスを拡張し、標準のプラグインAPIプロバイダーからプラグインを作成することで、依存関係は自動的に計算され、宣言されます。
概要
設定エンティティの依存関係は、設定エンティティ定義のconfig_dependenciesキーを使用して宣言されます。この配列のキーは次のいずれかになります:
- content
- config
- module
- theme
設定エンティティは、\Drupal\Core\Config\Entity\ConfigEntityInterface::calculateDependencies()を実装することで依存関係を定義します。このメソッドは、設定エンティティの\Drupal\Core\Entity\EntityInterface::preSave()の実装から呼び出す必要があります。実装では、\Drupal\Core\Config\Entity\ConfigEntityBase::addDependency()ヘルパーメソッドを使用して依存関係を追加する必要があります。コアのすべての実装は、\Drupal\Core\Config\Entity\ConfigEntityBase::calcDependencies()親メソッドを呼び出します。このメソッドは依存関係をリセットし、\Drupal\Core\Entity\EntityWithPluginCollectionInterfaceを実装する設定エンティティのプラグイン提供モジュールを決定する実装を提供します。これらのクラスとメソッドの詳細については、設定依存関係マネージャーのAPIドキュメントを参照してください。
設定依存関係の計算方法
設定エンティティのプロパティに基づく依存関係の計算
@todo - \Drupal\block\Entity\Block::calculateDependenciesを参照
他の設定エンティティに基づく依存関係の計算
@todo - \Drupal\entity\EntityDisplayBase::calculateDependenciesを参照(これは非常に複雑な例です)
プラグインとその派生プラグインでの依存関係の計算
@todo - Drupal\Core\Config\Entity\ConfigEntityBase::calculateDependenciesを参照 - configエンティティがEntityWithPluginCollectionInterfaceを実装している場合、プラグインを提供するモジュールへの依存関係が自動的に追加されることに注意してください。
派生プラグインの定義は、基本プラグインから派生します。たとえば、\Drupal\system\Plugin\Derivative\SystemMenuBlockは、\Drupal\system\Plugin\Block\SystemMenuBlockプラグインの派生です。システムメニューブロックには、ブロックモジュールの設定エンティティと、ブロックを介して提供されるメニューの設定エンティティの間に依存関係が設定されている必要があります。
\Drupal\system\Plugin\Block\SystemMenuBlockはgetDerivativeDefinitions()メソッドを実装しています。したがって、Bartikのフッターメニューブロックなどの派生メニューブロックは、対応する\Drupal\system\Entity\Menuエンティティに依存します。
public function getDerivativeDefinitions($base_plugin_definition) {
foreach ($this->menuStorage->loadMultiple() as $menu => $entity) {
$this->derivatives[$menu] = $base_plugin_definition;
$this->derivatives[$menu]['admin_label'] = $entity->label();
$this->derivatives[$menu]['config_dependencies']['config'] = array($entity->getConfigDependencyName());
}
return $this->derivatives;
}
上記のコードでは、各派生システムメニューブロックに、ブロックのメニューを提供するエンティティの設定依存関係が割り当てられています。設定依存関係の識別に使用するエンティティ名を取得するには、エンティティのgetConfigDependencyName()メソッドが呼び出されます。エンティティ名は複合文字列であり、依存関係が宣言されている場所でハードコードすべきではありません。
config_dependenciesプロパティは、プラグイン定義の一部として宣言することもできます。ただし、設定エンティティの依存関係は主に動的な値であるため、計算されます。プラグイン定義で静的依存関係を宣言することはめったに想定されておらず、避けるべきです。
必須の依存関係
@todo - https://www.drupal.org/node/2404447を参照。
設定ファイルのエクスポートとインポートの詳細については、Drupal 8での設定の管理を参照してください。