it-swarm.com.de

Programmgesteuert etwas tun, wenn ein Knoten aktualisiert wird

Ich möchte etwas tun, wenn ein Knoten aktualisiert wird. Um es einfach zu halten, lassen Sie uns beispielsweise eine drupal - Nachricht anzeigen.

hello_world.routing.yml

hello_world:
    path: /node/{node}
    defaults:
        _controller: Drupal\hello_world\Controller\HelloWorldController::hello_world_entity_update
    requirements:
        _permission: 'access content'

Ich bin mir nicht sicher, ob der Pfad stattdessen /node/{node}/edit Sein soll.

HelloWorldController.php

<?php
/**
 * @file
 * Contains \Drupal\hello_world\Controller\HelloController.
 */

namespace Drupal\hello_world\Controller;

use Drupal\Core\Controller\ControllerBase;

class HelloWorldController extends ControllerBase {

  public function hello_world_entity_update(Drupal\Core\Entity\EntityInterface $entity) { 

    drupal_set_message(t('Something @var just happened.', array('@var' => 'cool')));  

  }
}

Da hook_node_update () abgeschrieben wurde, gehe ich davon aus, dass wir jetzt hook_entity_update () verwenden müssen.

Ich erhalte beim Aktualisieren eines Knotens keine Nachricht. Was fehlt mir oder was mache ich falsch?


Aktualisieren

Nur damit ich niemanden verwirre. Ich wurde einer Gehirnwäsche unterzogen und dachte, ich brauche eine Routing-Datei und einen Controller. Alle D8-Beispiele verwenden sie.

Da ich keine Seiten erstellt habe, stellt sich heraus ich brauchte weder eine routing.yml-Datei noch eine Controller.php-Datei noch den Ordner/src. Alles, was ich tun musste, war mich dem anzunähern wie Drupal 7, alles was ich brauchte war die .info.yml Datei und eine .module Datei, um den Hook zu setzen.

5
No Sssweat

Hooks werden weiterhin als globale prozedurale Funktionen implementiert. Sie müssen sie in der .module-Datei wie Drupal 7, nicht in einer Controller-Klasse) deklarieren:

function MYMODULE_entity_update(Drupal\Core\Entity\EntityInterface $entity) {
  // ...
}

Das System wird zu OO wechseln in Drupal 9.

Es ist auch erwähnenswert, dass hook_ENTITY_TYPE_update() ebenfalls existiert, sodass Sie weiterhin hook_node_update() verwenden können:

function MYMODULE_node_update(Drupal\node\NodeInterface $node) {
  // ...
}
8
Clive
  1. Sie müssen hierfür keinen Controller definieren.
  2. Schreiben Sie diesen Code in Ihre benutzerdefinierte .module-Datei.

verwenden Sie Drupal\Core\Entity\EntityInterface.

 function module_name_entity_update(EntityInterface $entity) { 

    drupal_set_message(t('Something @var just happened.', array('@var' => 'cool')));  

  }
2
Shreya Shetty