ฉันมีเอนทิตีที่เรียกว่าผลิตภัณฑ์ของเอนทิตี และเอนทิตีนี้มีแบบฟอร์ม หากคุณเปลี่ยนฟิลด์ Title ในแบบฟอร์มนี้ Drupal จะบันทึกค่าใหม่ของฟิลด์นี้โดยอัตโนมัติในตารางที่เหมาะสมในฐานข้อมูล แต่นอกจากนี้ ฉันยังบันทึกการเปลี่ยนแปลงฟิลด์ Title ในส่วน แบบฟอร์มไปยังตารางฐานข้อมูลอื่น ผลิตภัณฑ์_ผลิตภัณฑ์ โดยสร้าง _custom_product_save_title
การทำงาน. มันจำเป็น. และฟังก์ชันนี้ถูกเรียกใช้ใน hook_ENTITY_TYPE_update()
ซึ่งติดตามการเปลี่ยนแปลงในผลิตภัณฑ์ของเอนทิตี
ฉันต้องเพิ่มการตรวจสอบเพื่อดูว่าชื่อเรื่องถูกบันทึกหรือไม่ และฟิลด์อื่นๆ ไม่ถูกบันทึกหรือไม่ โปรดบอกฉันว่าการตรวจสอบดังกล่าวควรมีลักษณะอย่างไรและควรอยู่ที่ใดในรหัส
ฟังก์ชัน _custom_product_save_title($custom_product_id, $entity_product_title) {
ถ้า (isset($fields['url']) && $fields['url'] == '') {
ถ้า (isset($fields['name'])) {
$fields['url'] = strtolower(str_replace(' ', '-', $fields['ชื่อ']));
}
}
$id = $form_state->getValue('รหัส');
ถ้า (!empty($form_state->getValue('cid'))) {
$query = $this->connection->update($this->getTableName())
->condition('cid', $form_state->getValue('cid'));
}
อื่น {
$query = $this->connection->insert($this->getTableName());
}
$result = $แบบสอบถาม
-> เขตข้อมูล ($ เขตข้อมูล)
->ดำเนินการ ();
ถ้า (!$id) {
$id = ผลลัพธ์ $;
}
แคช::invalidateTags([
"ผลิตภัณฑ์:" . $form_state->getValue('รหัส'),
]);
แคช::invalidateTags([
"ผลิตภัณฑ์:$custom_product_id",
]);
ถ้า (!$custom_product_id) {
แคช::invalidateTags([
"รายการสินค้า",
]);
}
}
/**
* ใช้ hook_ENTITY_TYPE_update()
*/
ฟังก์ชัน product_admin_node_update (\Drupal\Core\Entity\EntityInterface $entity) {
ถ้า ($entity->bundle() == 'ผลิตภัณฑ์') {
$custom_product_id = $entity->get('field_product_cid')->value;
$entity_product_title = $entity->getTitle();
_custom_product_save_title($custom_product_id, $entity_product_title);
}
}
หลังจากดีบักโค้ดโดยใช้ xdebug ฉันเห็นโครงสร้างต่อไปนี้ของสิ่งที่มาในอาร์กิวเมนต์มาตรฐาน $entity
ของเบ็ด:
$entity
เขตข้อมูล
field_product_cid
field_second
.....
ชื่อ
x-ค่าเริ่มต้น
รายการ
0
ค่า
ค่า = âชื่อของฉันâ