Ganchos utilizados en varias operaciones de entidad.

Las operaciones de creación, lectura, actualización y eliminación de entidades (CRUD) las realizan las clases de almacenamiento de entidades; consulte el tema Entity API para obtener más información. La mayoría de las entidades utilizan o amplían las clases predeterminadas: Drupal Core Entity Sql SqlContentEntityStorage para entidades de contenido y Drupal Core Config Entity ConfigEntityStorage para entidades de configuración. Para estas entidades, existe un conjunto de ganchos que se invoca para cada operación CRUD, que los desarrolladores de módulos pueden implementar para afectar estas operaciones; estos ganchos en realidad se invocan desde métodos en Drupal Core Entity EntityStorageBase.

En el caso de las entidades de contenido, la visualización y el renderizado son manejados por una clase de constructor de vistas; consulte el tema Entity API para obtener más información. La mayoría de los creadores de vistas extienden o usan la clase predeterminada Drupal Core Entity EntityViewBuilder.

La edición de entidades (incluida la adición de nuevas entidades) se maneja mediante clases de formulario de entidad; consulte el tema Entity API para obtener más información. La mayoría de los formularios de edición de entidades amplían las clases base Drupal Core Entity EntityForm o Drupal Core Entity ContentEntityForm. Tenga en cuenta que muchas otras operaciones, como confirmar la eliminación de entidades, también utilizan clases de formulario de entidad.

Este tema enumera todas las operaciones de vista y CRUD de entidad, y los ganchos y otras operaciones que se invocan (en orden) para cada operación. Algunas notas:

  • Siempre que se invoca un gancho de entidad, hay un gancho de entidad específico de tipo y un gancho de entidad genérico. Por ejemplo, durante una operación de creación en un nodo, primero se invocaba hook_node_create () y luego hook_entity_create ().
  • Los ganchos específicos del tipo de entidad se representan en la lista siguiente como hook_ENTITY_TYPE _… (hook_ENTITY_TYPE_create () en este ejemplo). Para implementar uno de estos ganchos para una entidad cuyo nombre de máquina es “foo”, defina una función llamada mymodule_foo_create (), por ejemplo. También tenga en cuenta que la entidad o matriz de entidades que se pasan a un gancho de tipo específico son de la clase de entidad específica, no de la clase de entidad genérica, por lo que en su implementación, puede hacer que el argumento $ entidad sea algo así como $ nodo y darle una sugerencia de tipo específico (que normalmente debería ser para la interfaz específica, como Drupal Node NodeInterface para nodos).
  • Se supone que $ storage en los ejemplos de código es una clase de almacenamiento de entidad. Consulte el tema Entity API para obtener información sobre cómo crear una instancia de la clase de almacenamiento correcta para un tipo de entidad.
  • Se supone que $ view_builder en los ejemplos de código es una clase de constructor de vistas de entidad. Consulte el tema Entity API para obtener información sobre cómo crear una instancia de la clase de constructor de vistas correcta para un tipo de entidad.
  • Durante muchas operaciones, se invocan métodos estáticos en la clase de entidad, que implementa Drupal Entity EntityInterface.

Crear operaciones

Para crear una entidad:

$entity = $storage->create();

// Add code here to set properties on the entity.

// Until you call save(), the entity is just in memory.
$entity->save();

También hay un método de acceso directo en clases de entidad, que crea una entidad con una matriz de valores de propiedad proporcionados: Drupal Core Entity :: create ().

Ganchos invocados durante la operación de creación:

  • hook_ENTITY_TYPE_create ()

  • hook_entity_create ()

Consulte Operaciones de guardado a continuación para conocer la parte de guardado de la operación.

Operaciones de lectura / carga

Para cargar (leer) una sola entidad:

$entity = $storage->load($id);

Para cargar varias entidades:

$entities = $storage->loadMultiple($ids);

Dado que load () llama a loadMultiple (), estas son realmente la misma operación. Aquí está el orden de los ganchos y otras operaciones que tienen lugar durante la carga de la entidad:

  • La entidad se carga desde el almacenamiento.
  • postLoad () se llama en la clase de entidad, pasando todas las entidades cargadas.
  • hook_entity_load ()

  • hook_ENTITY_TYPE_load ()

Cuando se carga una entidad, normalmente se carga la revisión de la entidad predeterminada. También es posible cargar una revisión diferente, para entidades que admiten revisiones, con este código:

$entity = $storage->loadRevision($revision_id);

Esto implica los mismos ganchos y operaciones que la carga normal de entidades.

Guardar operaciones

Para actualizar una entidad existente, deberá cargarla, cambiar las propiedades y luego guardar; como se describió anteriormente, al crear una nueva entidad, también deberá guardarla. Aquí está el orden de los ganchos y otros eventos que ocurren durante el guardado de una entidad:

  • preSave () se llama en el objeto de entidad y en los objetos de campo.
  • hook_ENTITY_TYPE_presave ()

  • hook_entity_presave ()

  • La entidad se guarda en el almacenamiento.
  • Para obtener actualizaciones sobre las entidades de contenido, si se agregó una traducción que no estaba presente anteriormente:
    • hook_ENTITY_TYPE_translation_insert ()

    • hook_entity_translation_insert ()

  • Para obtener actualizaciones sobre las entidades de contenido, si se eliminó una traducción:
    • hook_ENTITY_TYPE_translation_delete ()

    • hook_entity_translation_delete ()

  • postSave () se llama en el objeto de entidad.
  • hook_ENTITY_TYPE_insert () (nuevo) o hook_ENTITY_TYPE_update () (actualización)

  • hook_entity_insert () (nuevo) o hook_entity_update () (actualización)

Algunos tipos de entidad específicos invocan ganchos durante las operaciones preSave () o postSave (). Ejemplos:

  • Configuración de campo preSave (): hook_field_storage_config_update_forbid ()
  • Node postSave (): hook_node_access_records () y hook_node_access_records_alter ()
  • Configurar entidades que actúan como paquetes de entidades en postSave (): hook_entity_bundle_create ()
  • Comentario: hook_comment_publish () y hook_comment_unpublish () según corresponda.

Editar operaciones

Cuando se usa el formulario de agregar / editar de una entidad para agregar o editar una entidad, hay varios ganchos que se invocan:

  • hook_entity_prepare_form ()

  • hook_ENTITY_TYPE_prepare_form ()

  • hook_entity_form_display_alter () (solo para entidades de contenido)

Eliminar operaciones

Para eliminar una o más entidades, cárguelas y luego elimínelas:

$entities = $storage->loadMultiple($ids);
$storage->delete($entities);

Durante la operación de eliminación, ocurren los siguientes ganchos y otros eventos:

  • Se llama a preDelete () en la clase de entidad.
  • hook_ENTITY_TYPE_predelete ()

  • hook_entity_predelete ()

  • La información de la entidad y del campo se elimina del almacenamiento.
  • postDelete () se llama en la clase de entidad.
  • hook_ENTITY_TYPE_delete ()

  • hook_entity_delete ()

Algunos tipos de entidad específicos invocan ganchos durante el proceso de eliminación. Ejemplos:

  • Paquete de entidades postDelete (): hook_entity_bundle_delete ()

Las revisiones individuales de una entidad también se pueden eliminar:

$storage->deleteRevision($revision_id);

Esta operación invoca las siguientes operaciones y ganchos:

  • La revisión está cargada (consulte las operaciones de lectura / carga más arriba).
  • La información de revisión y campo se elimina de la base de datos.
  • hook_ENTITY_TYPE_revision_delete ()

  • hook_entity_revision_delete ()

Ver / renderizar operaciones

Para hacer una matriz de renderizado para una entidad cargada:

// You can omit the language ID if the default language is being used.
$build = $view_builder->view($entity, 'view_mode_name', $language->getId());

También puede utilizar el método viewMultiple () para ver varias entidades.

Hooks invocados durante la operación de construcción de una matriz de renderizado:

  • hook_entity_view_mode_alter ()

  • hook_ENTITY_TYPE_build_defaults_alter ()

  • hook_entity_build_defaults_alter ()

Los constructores de vistas de algunos tipos anulan estos ganchos, en particular:

  • El constructor de vistas de Tour no invoca ningún gancho.
  • El constructor de vistas de bloque invoca hook_block_view_alter () y hook_block_view_BASE_BLOCK_ID_alter (). Tenga en cuenta que en otros constructores de vistas, los enlaces de modificación de vistas se ejecutan más adelante en el proceso.

Durante la operación de renderizado, el visor de entidades predeterminado ejecuta los siguientes enlaces y operaciones en el paso de renderizado previo:

  • hook_entity_view_display_alter ()

  • hook_entity_prepare_view ()

  • Los campos de entidad se cargan y se crean matrices de renderizado para ellos utilizando sus formateadores.
  • hook_entity_display_build_alter ()

  • hook_ENTITY_TYPE_view ()

  • hook_entity_view ()

  • hook_ENTITY_TYPE_view_alter ()

  • hook_entity_view_alter ()

Algunos constructores específicos tienen ganchos específicos:

  • El constructor de vistas de nodo invoca hook_node_links_alter ().
  • El constructor de vistas de comentarios invoca hook_comment_links_alter ().

Después de este punto en el renderizado, el sistema de temas se hace cargo. Consulte el tema Sistema de temas y API de procesamiento para obtener más información.

Otros ganchos de entidad

Algunos tipos de entidades invocan ganchos para operaciones específicas:

  • Buscando nodos:
    • hook_ranking ()

    • La consulta se ejecuta para encontrar nodos coincidentes.
    • El nodo resultante está cargado
    • Se construye la matriz de renderizado de nodo
    • Se llama a comment_node_update_index () (esto agrega texto “N comentarios”)

    • hook_node_search_result ()

  • Buscar nodos de indexación:
    • El nodo está cargado
    • Se construye la matriz de renderizado de nodo
    • hook_node_update_index ()

Expediente

core / lib / Drupal / Core / Entity /entity.api.php, línea 16
Hooks y documentación relacionada con entidades.

Funciones

Nombre Localización Descripción
hook_entity_build_defaults_alter core / lib / Drupal / Core / Entity /entity.api.php Modifique los valores renderizables de la entidad antes de verificar la caché en drupal_render ().
hook_entity_bundle_delete core / lib / Drupal / Core / Entity /entity.api.php Actuar sobre entity_bundle_delete ().
hook_entity_create core / lib / Drupal / Core / Entity /entity.api.php Actúa al crear una nueva entidad.
hook_entity_delete core / lib / Drupal / Core / Entity /entity.api.php Responder a la eliminación de la entidad.
hook_entity_display_build_alter core / lib / Drupal / Core / Entity /entity.api.php Modifique la matriz de representación generada por un EntityDisplay para una entidad.
hook_entity_field_values_init core / lib / Drupal / Core / Entity /entity.api.php Actúa al inicializar un objeto de entidad seleccionable.
hook_entity_form_display_alter core / lib / Drupal / Core / Entity /entity.api.php Modifique la configuración utilizada para mostrar un formulario de entidad.
hook_entity_insert core / lib / Drupal / Core / Entity /entity.api.php Responder a la creación de una nueva entidad.
hook_entity_load core / lib / Drupal / Core / Entity /entity.api.php Actuar sobre las entidades cuando se cargan.
hook_entity_predelete core / lib / Drupal / Core / Entity /entity.api.php Actuar antes de la eliminación de la entidad.
hook_entity_prepare_form core / lib / Drupal / Core / Entity /entity.api.php Actúa sobre un objeto de entidad a punto de mostrarse en un formulario de entidad.
hook_entity_prepare_view core / lib / Drupal / Core / Entity /entity.api.php Actuar sobre las entidades a medida que se preparan para su visualización.
hook_entity_presave core / lib / Drupal / Core / Entity /entity.api.php Actuar sobre una entidad antes de que sea creada o actualizada.
hook_entity_revision_delete core / lib / Drupal / Core / Entity /entity.api.php Responder a la eliminación de la revisión de la entidad.
hook_entity_translation_create core / lib / Drupal / Core / Entity /entity.api.php Actúa al crear una nueva entidad de traducción.
hook_entity_translation_delete core / lib / Drupal / Core / Entity /entity.api.php Responder a la eliminación de la traducción de la entidad.
hook_entity_translation_insert core / lib / Drupal / Core / Entity /entity.api.php Responder a la creación de una nueva entidad de traducción.
hook_ENTITY_TYPE_build_defaults_alter core / lib / Drupal / Core / Entity /entity.api.php Modifique los valores renderizables de la entidad antes de verificar la caché en drupal_render ().
hook_ENTITY_TYPE_create core / lib / Drupal / Core / Entity /entity.api.php Actúa al crear una nueva entidad de un tipo específico.
hook_ENTITY_TYPE_delete core / lib / Drupal / Core / Entity /entity.api.php Responder a la eliminación de una entidad de un tipo en particular.
hook_ENTITY_TYPE_field_values_init core / lib / Drupal / Core / Entity /entity.api.php Actúa al inicializar un objeto de entidad seleccionable.
hook_ENTITY_TYPE_insert core / lib / Drupal / Core / Entity /entity.api.php Responder a la creación de una nueva entidad de un tipo particular.
hook_ENTITY_TYPE_load core / lib / Drupal / Core / Entity /entity.api.php Actuar sobre entidades de un tipo específico cuando se cargan.
hook_ENTITY_TYPE_predelete core / lib / Drupal / Core / Entity /entity.api.php Actuar antes de la eliminación de la entidad de un tipo de entidad en particular.
hook_ENTITY_TYPE_prepare_form core / lib / Drupal / Core / Entity /entity.api.php Actúa sobre un tipo particular de objeto de entidad a punto de estar en forma de entidad.
hook_ENTITY_TYPE_presave core / lib / Drupal / Core / Entity /entity.api.php Actuar sobre un tipo específico de entidad antes de que se cree o actualice.
hook_ENTITY_TYPE_revision_delete core / lib / Drupal / Core / Entity /entity.api.php Responder a la eliminación de la revisión de la entidad de un tipo en particular.
hook_ENTITY_TYPE_translation_create core / lib / Drupal / Core / Entity /entity.api.php Actúa al crear una nueva entidad de traducción de un tipo específico.
hook_ENTITY_TYPE_translation_delete core / lib / Drupal / Core / Entity /entity.api.php Responder a la eliminación de la traducción de entidades de un tipo en particular.
hook_ENTITY_TYPE_translation_insert core / lib / Drupal / Core / Entity /entity.api.php Responder a la creación de una nueva entidad de traducción de un tipo particular.
hook_ENTITY_TYPE_update core / lib / Drupal / Core / Entity /entity.api.php Responder a las actualizaciones de una entidad de un tipo en particular.
hook_ENTITY_TYPE_view core / lib / Drupal / Core / Entity /entity.api.php Actuar sobre las entidades de un tipo particular que se ensamblan antes de renderizar.
hook_ENTITY_TYPE_view_alter core / lib / Drupal / Core / Entity /entity.api.php Modifique los resultados de la matriz de creación de entidades para un tipo de entidad en particular.
hook_entity_update core / lib / Drupal / Core / Entity /entity.api.php Responder a las actualizaciones de una entidad.
hook_entity_view core / lib / Drupal / Core / Entity /entity.api.php Actuar sobre las entidades que se ensamblan antes de la prestación.
hook_entity_view_alter core / lib / Drupal / Core / Entity /entity.api.php Modifique los resultados de la matriz de creación de entidades.
hook_entity_view_display_alter core / lib / Drupal / Core / Entity /entity.api.php Modifique la configuración utilizada para mostrar una entidad.
hook_entity_view_mode_alter core / lib / Drupal / Core / Entity /entity.api.php Cambia el modo de vista de una entidad que se muestra.
hook_node_search_result núcleo / módulos / nodo /node.api.php Actuar sobre un nodo que se muestra como resultado de la búsqueda.
hook_node_update_index núcleo / módulos / nodo /node.api.php Actuar sobre un nodo que se indexa para realizar búsquedas.
hook_ranking núcleo / módulos / nodo /node.api.php Proporcione métodos adicionales de puntuación para los resultados de búsqueda principales de los nodos.