Drupal 8,以编程方式获取自定义内容

时间:2015-11-25 23:34:10

标签: drupal-8 drupal-nodes drupal-fields

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

我的自定义内容包含一个字段" body" (类型文本),字段"描述" (类型文本),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 个答案:

答案 0 :(得分:8)

NodeType是节点(内容)实体的(config)捆绑实体。

正确的电话会是:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

例如,如果实体类型没有捆绑,则为用户实体。 尝试这个

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