Desejo atualizar o valor de um campo de nó quando um nó é atualizado.
Tentei usar o código mencionado aqui Atualizando programaticamente um nó 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();
}
}
mas não funcionou. Eu recebo um erro 500 depois de salvar o nó. Também tentei retirar a instrução if e especificar uma identificação de nó$node = Node::load(1);
Eu também tentei usar Atualizar um nó / Entidade programaticamente no Drupal 8
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();
}
mas sem sorte também.
Além disso, tentei usar diferentes ganchos entity_presave, entity_update, node_update, mas não fez nenhuma diferença.
Essa é outra variação do uso do gancho que você tentou usar originalmente.
Eu acho que o problema com o seu código é que você tenta carregar uma nova instância do nó, mas você deve usar o nó que é fornecido como paramater
$entity
:Editar:
Adicionada a instrução de uso ao código.
fonte
The website encountered an unexpected error. Please try again later.
use Drupal\node\NodeInterface;
código não interrompe mais automaticamente o site, mas depois de salvar o nó, recebo o erro 500 como estava na minha pergunta e os logs não registram nada sobre isso.Os títulos no Drupal 8 não são definidos como campos padrão; eles têm sua própria função. Use
$node->setTitle('New Title');
para um nó ou$entity->setLabel('New Title');
para uma entidade genérica. Veja Node :: setTitle para mais informações.fonte