노드가 업데이트 될 때 노드 필드의 값을 업데이트하고 싶습니다.
여기에 언급 된 코드를 사용해 보았습니다. 프로그래밍 방식으로 노드 업데이트 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 문을 꺼내고 노드 ID를 지정하려고 시도했다.$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를 사용해 보았지만 아무런 차이가 없었습니다.
답변
이 코드를 시도해 볼 수 있습니다.
function MODULE_NAME_node_presave(Drupal\node\NodeInterface $node) {
$node->setTitle('new Title');
$node->set('body', 'this is body');
}
답변
이것은 원래 사용하려고 시도한 후크를 사용하는 또 다른 변형입니다.
코드의 문제는 노드의 새 인스턴스를로드하려고 시도하지만 매개 변수로 제공된 노드를 사용해야한다는 것입니다 $entity
.
use Drupal\node\NodeInterface;
function hello_world_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
if ($entity instanceof NodeInterface) {
$entity->title->value = 'testing'; //set value for field
// $entity->save(); (not needed)
}
}
편집하다:
코드에 use 문을 추가했습니다.
답변
Drupal 8의 제목은 표준 필드와 같이 설정되지 않습니다. 그들은 자신의 기능을 가지고 있습니다. $node->setTitle('New Title');
노드 또는 $entity->setLabel('New Title');
일반 엔티티에 사용하십시오 . 자세한 정보는 Node :: setTitle 을 참조하십시오.