Я хочу обновить значение поля узла при обновлении узла.
Попробовал с помощью кода, упомянутого здесь Программно обновить узел 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();
}
}
но это не сработало. Я получаю ошибку 500 после сохранения узла. Я также попытался извлечь оператор if и указать идентификатор узла$node = Node::load(1);
Я также пытался использовать обновление узла / сущности программно в 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();
}
но тоже не повезло.
Кроме того, я пытался использовать разные хуки entity_presave, entity_update, node_update, но безрезультатно.
Это еще один вариант использования крючка, который вы изначально пытались использовать.
Я думаю, что проблема с вашим кодом заключается в том, что вы пытаетесь загрузить новый экземпляр узла, но вы должны использовать узел, предоставленный в качестве параметра
$entity
:Редактировать:
Добавлен оператор использования в код.
источник
The website encountered an unexpected error. Please try again later.
use Drupal\node\NodeInterface;
кода больше не нарушает работу сайта автоматически, но после сохранения узла я получаю ошибку 500, как будто я получаю в своем вопросе, и в журналах ничего не записывается.Заголовки в Drupal 8 не устанавливаются как стандартные поля; у них есть своя функция. Используйте
$node->setTitle('New Title');
для узла или$entity->setLabel('New Title');
для общего объекта. Смотрите Node :: setTitle для получения дополнительной информации.источник