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?

10
demandé sur Baik Ho 2015-04-15 14:05:31

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);
0
répondu Jameel Grand 2015-09-08 12:17:28

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.

0
répondu Christian 2016-08-16 07:06:57

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
-1
répondu Navnish Bhardwaj 2015-09-08 09:56:12

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();
-1
répondu sareed 2017-11-28 21:56:00