Drupal8,以编程方式获取自定义内容的字段列表



我想以编程方式创建一个自定义内容(通过管理UI创建的自定义内容)。但是,在创建之前,我希望以编程方式检查我的自定义内容的字段类型

我的自定义内容包含字段"body"(类型文本)、字段"description"(类型文字)、int字段(类型int)、附加文件字段(类型fid?)。。。

我用Drupal8的新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/classe/poo…:/

谢谢!

NodeType是Node(content)实体的(config)bundle实体。

正确的调用是:

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

要获得任何实体类型的字段定义,请使用以下结构:

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');

不赞成使用给定的答案。现在应该加载实体,只需使用getFieldDefinitions()来获取字段定义。

$node = Node::load($slide_id);
$field_defs = $node->getFieldDefinitions();

$field_defs = Drupal::service('entity_field.manager')->getFieldDefinitions('taxonomy_term', '<taxonomy machine name here>');

如果您想获得分类词汇的字段定义列表

如果实体类型没有绑定,例如用户实体。

试试这个:

 // 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); 

相关内容

  • 没有找到相关文章

最新更新