如何以编程方式在Drupal 8中创建实体引用字段?

All*_*lex 10 drupal drupal-8

我想使用我的自定义模块在Drupal 8中创建一个实体引用字段.就像有人点击Drupal页面上的链接一样,将自动在页面节点类型中创建实体引用字段.

谁能帮我这个?

sar*_*eed 5

所以如果我需要再次的话我希望能更快地找到这个......

创建字段存储:

 if (!$field_storage = FieldStorageConfig::loadByName($entity_type, $field_name)) {
   FieldStorageConfig::create([
     'field_name' => $field_name,
     'entity_type' => $entity_type,
     'type' => $type,
     'cardinality' => -1,

     // Optional to target entity types.
     'settings' => [
       'target_type' => $entity_target_type, // Ex: node, taxonomy_term.
     ],
   ])->save();
 }
Run Code Online (Sandbox Code Playgroud)

创建字段:

FieldConfig::create([
  'field_name' => $field_name,
  'entity_type' => $entity_type,
  'bundle' => $bundle,
  'label' => $label,
  'cardinality' => -1,

  // Optional to target bundles.
  'settings' => [
    'handler' => 'default',
    'handler_settings' => [
      'target_bundles' => [
        $vid1,
        $vid2,
      ],
    ],
  ],
])->save();
Run Code Online (Sandbox Code Playgroud)


Nav*_*waj -2

您可以从https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Entity!Plugin!DataType!EntityReference.php/8获得帮助

或者您也可以下载示例实体示例https://www.drupal.org/project/examples

或者你也可以使用我的方法,如下:

设置模块 content_entity_example.info.yml

name: Content Entity Example
type: module
description: 'Provides ContentEntityExampleContact entity.'
package: Example modules
core: 8.x
# These modules are required by the tests, must be available at bootstrap time
dependencies:
  - options
  - entity_reference
  - examples
Run Code Online (Sandbox Code Playgroud)

在 Drupal 8 中创建内容实体类型

我们将创建一个“联系人”实体来添加、编辑和删除人员(联系人)。它完全可现场使用,并使用 Drupal 8 中提供的大多数新实体概念。

路由 content_entity_example.routing.yml

# This file brings everything together. Very nifty!

# Route name can be used in sevaral place (links, redirects, local actions etc.)
entity.content_entity_example_contact.canonical:
  path: '/content_entity_example_contact/{content_entity_example_contact}'
  defaults:
  # Calls the view controller, defined in the annotation of the contact entity
    _entity_view: 'content_entity_example_contact'
    _title: 'Contact Content'
  requirements:
  # Calls the access controller of the entity, $operation 'view'
    _entity_access: 'content_entity_example_contact.view'

entity.content_entity_example_contact.collection:
  path: '/content_entity_example_contact/list'
  defaults:
  # Calls the list controller, defined in the annotation of the contact entity.
    _entity_list: 'content_entity_example_contact'
    _title: 'Contact List'
  requirements:
  # Checks for permission directly.
    _permission: 'view contact entity'

content_entity_example.contact_add:
  path: '/content_entity_example_contact/add'
  defaults:
  # Calls the form.add controller, defined in the contact entity.
    _entity_form: content_entity_example_contact.add
    _title: 'Add Contact'
  requirements:
    _entity_create_access: 'content_entity_example_contact'

entity.content_entity_example_contact.edit_form:
  path: '/content_entity_example_contact/{content_entity_example_contact}/edit'
  defaults:
  # Calls the form.edit controller, defined in the contact entity.
    _entity_form: content_entity_example_contact.edit
    _title: 'Edit Contact'
  requirements:
    _entity_access: 'content_entity_example_contact.edit'

entity.content_entity_example_contact.delete_form:
  path: '/contact/{content_entity_example_contact}/delete'
  defaults:
    # Calls the form.delete controller, defined in the contact entity.
    _entity_form: content_entity_example_contact.delete
    _title: 'Delete Contact'
  requirements:
    _entity_access: 'content_entity_example_contact.delete'

content_entity_example.contact_settings:
  path: 'admin/structure/content_entity_example_contact_settings'
  defaults:
    _form: '\Drupal\content_entity_example\Form\ContactSettingsForm'
    _title: 'Contact Settings'
  requirements:
    _permission: 'administer contact entity'
Run Code Online (Sandbox Code Playgroud)

实体注释的“链接”部分中定义的操作的路由名称必须遵循正确的模式。有关详细信息,请参阅下面的内容实体类。

content_entity_example.links.menu.yml

与路由文件结合,它取代了模块的 hook_menu。

# Define the menu links for this module

entity.content_entity_example_contact.collection:
  title: 'Content Entity Example: Contacts Listing'
  route_name: entity.content_entity_example_contact.collection
  description: 'List Contacts'
  weight: 10
content_entity_example_contact.admin.structure.settings:
  title: Contact Settings
  description: 'Configure Contact entity'
  route_name:  content_entity_example.contact_settings
  parent: system.admin_structure
Run Code Online (Sandbox Code Playgroud)

content_entity_example.links.action.yml

# All action links for this module

content_entity_example.contact_add:
  # Which route will be called by the link
  route_name: content_entity_example.contact_add
  title: 'Add Contact'

  # Where will the link appear, defined by route name.
  appears_on:
    - entity.content_entity_example_contact.collection
    - entity.content_entity_example_contact.canonical
Run Code Online (Sandbox Code Playgroud)