Ich möchte den Wert eines Knotenfelds aktualisieren, wenn ein Knoten aktualisiert wird.
Versucht mit dem hier genannten Code Programmgesteuertes Aktualisieren eines Knotens Drupal 8
use Drupal\node\Entity\Node;
function hello_world_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
$check = \Drupal::routeMatch()->getParameter('node');
if ($check) {
$node = Node::load($check->nid->value);
$node->title->value = 'testing'; //set value for field
$node->save();
}
}
aber es hat nicht funktioniert. Nach dem Speichern des Knotens erhalte ich einen 500-Fehler. Ich habe auch versucht, die if-Anweisung herauszunehmen und eine Node-ID anzugeben$node = Node::load(1);
Ich habe auch versucht, einen Knoten / eine Entität programmgesteuert in Drupal 8 zu aktualisieren
use Drupal\node\Entity\Node;
function hello_world_node_update(Drupal\node\NodeInterface $node) {
$node = Node::load(1);
$node->set("title", 'New value'); // also tried $node->setTitle('The new Title');
$node->save();
}
aber auch kein glück.
Außerdem habe ich versucht, verschiedene Hooks "entity_presave", "entity_update" und "node_update" zu verwenden, aber keinen Unterschied gemacht.
Dies ist eine weitere Variante der Verwendung des Hakens, den Sie ursprünglich verwendet haben.
Ich denke, das Problem mit Ihrem Code ist, dass Sie versuchen, eine neue Instanz des Knotens zu laden, aber Sie sollten den als Parameter bereitgestellten Knoten verwenden
$entity
:Bearbeiten:
Die use-Anweisung wurde zum Code hinzugefügt.
quelle
The website encountered an unexpected error. Please try again later.
use Drupal\node\NodeInterface;
Code wird die Site nicht mehr automatisch unterbrochen, aber nach dem Speichern des Knotens wird der Fehler 500 angezeigt, wie ich ihn in meiner Frage erhalten habe, und in den Protokollen wird nichts darüber protokolliert.Titel in Drupal 8 werden nicht wie Standardfelder festgelegt. Sie haben ihre eigene Funktion. Verwendung
$node->setTitle('New Title');
für einen Knoten oder$entity->setLabel('New Title');
für eine generische Entität. Weitere Informationen finden Sie unter Node :: setTitle .quelle