Drupal 8,以编程方式获取自定义内容的字段列表
Drupal 8, get programmatically the list of fields of a custom content
我想以编程方式创建自定义内容(通过管理员创建的自定义内容 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 Class、FieldItemList Class...但我仍然不明白如何使用 drupal 8 / class / poo ... :/
谢谢!
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');
或
$field_defs = \Drupal::service('entity_field.manager')->getFieldDefinitions('taxonomy_term', '<taxonomy machine name here>');
如果你想获取 field_definitions 的分类词汇表
给出的答案已弃用。您现在应该加载实体并仅使用 getFieldDefinitions()
来获取字段定义。
$node = Node::load($slide_id);
$field_defs = $node->getFieldDefinitions();
如果实体类型没有捆绑包,例如用户实体。
试试这个:
// 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);
我想以编程方式创建自定义内容(通过管理员创建的自定义内容 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 Class、FieldItemList Class...但我仍然不明白如何使用 drupal 8 / class / poo ... :/
谢谢!
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');
或
$field_defs = \Drupal::service('entity_field.manager')->getFieldDefinitions('taxonomy_term', '<taxonomy machine name here>');
如果你想获取 field_definitions 的分类词汇表
给出的答案已弃用。您现在应该加载实体并仅使用 getFieldDefinitions()
来获取字段定义。
$node = Node::load($slide_id);
$field_defs = $node->getFieldDefinitions();
如果实体类型没有捆绑包,例如用户实体。
试试这个:
// 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);