Saya ingin memperbarui nilai bidang simpul ketika sebuah simpul diperbarui.
Mencoba menggunakan kode yang disebutkan di sini Secara terprogram memperbarui simpul 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();
}
}
tapi itu tidak berhasil. Saya mendapatkan 500 kesalahan setelah menyimpan node. Saya juga mencoba mengeluarkan pernyataan if dan menentukan id node$node = Node::load(1);
Saya juga mencoba menggunakan Perbarui node / Entitas secara pemrograman di 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();
}
tapi tidak berhasil juga.
Selain itu, saya mencoba menggunakan kait yang berbeda dengan entitas_presave, entitas_update, node_update, tetapi tidak membuat perbedaan.
Ini adalah variasi lain dengan menggunakan pengait yang Anda coba gunakan semula.
Saya pikir masalah dengan kode Anda adalah bahwa Anda mencoba memuat instance baru dari node, tetapi Anda harus menggunakan node yang disediakan sebagai paramater
$entity
:Edit:
Menambahkan pernyataan penggunaan ke kode.
sumber
The website encountered an unexpected error. Please try again later.
use Drupal\node\NodeInterface;
kode tidak lagi merusak situs secara otomatis, tetapi setelah menyimpan node, saya mendapatkan 500 error seperti yang saya dapatkan di pertanyaan saya dan log tidak mencatat apa-apa tentang hal itu.Judul dalam Drupal 8 tidak disetel seperti bidang standar; mereka memiliki fungsi mereka sendiri. Gunakan
$node->setTitle('New Title');
untuk simpul atau$entity->setLabel('New Title');
entitas generik. Lihat Node :: setTitle untuk info lebih lanjut.sumber