9

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

我的自定义内容包含一个字段“正文”(类型文本)、一个字段“描述”(类型文本)、一个 int 字段(类型 int)、一个附件字段(类型 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 是 Node(内容)实体的(配置)捆绑实体。

正确的调用是:

\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 回答
3

给定的答案已被弃用。您现在应该加载实体并仅用于getFieldDefinitions()获取字段定义。

$node = Node::load($slide_id);
$field_defs = $node->getFieldDefinitions();
于 2017-09-20T10:36:09.577 回答
1

或者

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

如果您想获取分类词汇表的 field_definitions 列表

于 2017-05-19T11:13:01.263 回答
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 回答