web-dev-qa-db-ja.com

どのモジュールがフィールドプラグインに関連付けられているかを判断するにはどうすればよいですか?

エンティティフックを実装し、 Computed Field FieldType plugins で定義されたすべてのフィールドを操作したいと思います。そのため、モジュールが提供するすべてのFieldTypeプラグインのリストが必要か、どのフィールドを操作する(または回避する)かを知るために、それに関連付けられているフィールドを知る必要があります。これは可能ですか?

プラグイン(_computed_string_、_computed_decimal_など)のリストをハードコード化したくないのは、後で新しいプラグインを追加して、リストを変更する必要があるためです。

そして、別のモジュールである計算フィールドプラグイン が独自のフィールドタイプをその接頭辞 で定義しているため、_computed_*_を使用できず、触れたくないそれ。

FieldDefinitionInterface :: getDefiningModule()のようなものが期待されていましたが、それは存在しないようです。

関心のある方のために、 計算されたカーディナリティのサポートの追加に取り組んでいます .

3
colan

質問のタイトルへの答えは簡単です。 getProvider()を介してプラグインから拡張機能を取得できます。したがって、すべてのFieldTypeプラグインのリストを作成するか、プラグイン定義から特定のフィールドタイプのプロバイダーを直接取得できます。

$module = \Drupal::service('plugin.manager.field.field_type')
  ->getDefinition($field_type)['provider'];

フィールド定義の場合、これはもう少し複雑です。フィールドストレージにもこのメソッドがありますが、構成済みフィールドの場合は常にモジュールfieldを返します。これはあなたが望むものではありません。しかし、別の場所があります。フィールドストレージを作成する場合、フィールドタイププラグインのプロバイダーは、プロパティmoduleに格納されます。したがって、FieldDefinitionInterfaceから始めて、モジュール名を取得できるはずです。

$module = $field_definition->getFieldStorageDefinition()->get('module');
2
4k4