9

プログラムでカスタム コンテンツ (管理 UI を介して作成されたカスタム コンテンツ) を作成したい。しかし、作成する前に、カスタム コンテンツのフィールドの種類をプログラムで確認したい

カスタム コンテンツには、フィールド「body」(type text)、フィールド「description」(type text)、int フィールド (type int)、添付ファイル フィールド (type fid ?) が含まれています...

Drupal 8 の新しい API を使っていくつかの方法をテストします。これが最後の試みです。

// I get the entity object "my_custom_content"
$entity_object = NodeType::load("my_custom_content");
dpm($entity_object); //Work perfectly


$test = \Drupal::getContainer()->get("entity_field.manager")->getFieldDefinitions("my_custom_content",$entity_object->bundle())
//The \Drupal::getConta... Return an error : The "my_custom_content" entity type does not exist.

この $entity_object を使用して、カスタム コンテンツのフィールドのリストを取得するにはどうすればよいですか? EntityFieldManager クラス、FieldItemList クラスが表示されます...しかし、まだ drupal 8 / class / poo で遊ぶ方法がわかりません ... :/

ありがとう !

4

4 に答える 4

12

NodeType は、ノード (コンテンツ) エンティティの (構成) バンドル エンティティです。

正しい呼び出しは次のようになります。

\Drupal::service('entity_field.manager')->getFieldDefinitions('node', 'my_custom_content');

entity_type のフィールド定義を取得するには、次の構造を使用します。

\Drupal::service('entity_field.manager')->getFieldDefinitions(ENTITY_TYPE_ID, BUNDLE_ID);

たとえば、IDがmulty_purpose_linkの段落バンドルのすべてのフィールド定義を取得する場合は、ENTITY_TYPE_IDを段落に、BUNDLE_IDをmulty_purpose_linkに置き換えます。

\Drupal::service('entity_field.manager')->getFieldDefinitions('paragraph', 'multy_purpose_link');
于 2015-11-28T02:54:27.613 に答える
1

エンティティ タイプにバンドルがない場合 (ユーザー エンティティなど)。

これを試して:

 // All user fields and ones added 
 $user_fields = \Drupal::service('entity_field.manager')->getFieldDefinitions('user','user'); 

// Just default 
$default_user_fields  = \Drupal::service('entity_field.manager')->getFieldDefinitions('user', NULL); 
于 2019-11-27T23:36:12.647 に答える