Comment créer un champ de référence entité dans Drupal 8 de manière programmatique?
je veux créer un champ de référence d'entité dans Drupal 8 en utilisant mon module personnalisé. Comme quand quelqu'un clique sur un lien sur une page Drupal, un champ de référence d'entité serait créé dans le type de noeud de page automatiquement.
quelqu'un Peut-il m'aider?
4 réponses
$node = new stdClass();
$node->title = "YOUR TITLE";
$node->type = "YOUR_NODE_TYPE";
....
$node->field_customer_nid[$node->language][]['target_id'] = $form_state['values']['entity id'];
...
node_submit($node);
node_save($node);
cela créera un champ de référence d'entité pour node
types de contenu avec le article
bundle.
$form['node_id'] = array(
'#type' => 'entity_autocomplete',
'#title' => $this->t('Node'),
'#target_type' => 'node',
'#selection_settings' => ['target_bundles' => ['article']],
'#tags' => TRUE,
'#size' => 30,
'#maxlength' => 1024,
);
Remarque: vous pouvez modifier target_type
pour d'autres entités comme taxonomy_term
.
vous pouvez obtenir de l'aide de https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Entity!Plugin!DataType!EntityReference.php/8
Ou vous pouvez télécharger des exemples de l'entité exemples https://www.drupal.org/project/examples
Ou vous pouvez utiliser ma méthode qui est comme ci-dessous:
module de configuration 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
création d'un type d'entité de contenu dans Drupal 8
nous allons créer une entité' Contact ' pour ajouter, éditer et supprimer des personnes (Contacts). Il est entièrement fieldable et utilise la plupart des nouveaux concepts d'entity disponibles dans Drupal 8.
Routage content_entity_example.routage.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'
les noms de routes pour les actions définies dans la section 'lien' de l'annotation de l'entité doivent suivre le bon modèle. Pour plus de détails, veuillez voir le Contenu de l'Entité de la Classe dessous.
content_entity_example.lien.menu.yml
en combinaison avec le fichier routing, ceci remplace hook_menu pour le module.
# 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
content_entity_example.lien.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
donc je peux espérer trouver cela plus rapidement si j'en ai besoin à nouveau...
Créer un champ de stockage:
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();
}
Créer un champ:
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();