ฉันกำลังพยายามสร้างวิธีง่ายๆ ในการดำเนินการบางอย่างบนฐานข้อมูลทุกครั้งที่ฉันอัปเดตโหนด
ฉันได้ดูโมดูล Action ของ Drupal แล้ว แต่ฉันไม่พบคู่มือดีๆ ที่อธิบายวิธีใช้งานเดอะ โมดูล ECA ทำงานเป็นกลไกในการเปิดใช้ Action ของฉัน แต่ฉันไม่สามารถดำเนินการ Action ของฉันได้ และฉันไม่รู้ว่าต้องดำเนินการอย่างไร
ขณะนี้ฉันกำลังสร้างโมดูลของตัวเองซึ่งจะมีการกระทำของฉัน คลาสต่อไปนี้เป็นคลาสของการกระทำของฉัน
<?php
เนมสเปซ Drupal\my_custom_actions\Plugin\Action;
ใช้ Drupal\Core\Action\ActionBase;
ใช้ Drupal\Core\Session\AccountInterface;
/**
* สร้างการกระทำที่กำหนดเอง
*
* @หนังบู๊(
* id = "node_action",
* label = @Translation("การดำเนินการกับฐานข้อมูล"),
* ประเภท = "โหนด"
* )
*/
คลาส DBAction ขยาย ActionBase {
/**
* {@inheritdoc}
*/
ดำเนินการฟังก์ชั่นสาธารณะ (โหนด $ = NULL) {
ถ้า (โหนด $) {
// TODO: ขั้นตอนการดำเนินการในฐานข้อมูล
\Drupal::messenger()->addStatus('การดำเนินการตกลง และเรามีโหนด');
}
}
/**
* {@inheritdoc}
*/
การเข้าถึงฟังก์ชันสาธารณะ ($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
/** @var \Drupal\node\NodeInterface $object */
// TODO: เขียนสิทธิ์ของคุณที่นี่
$result = $object->access('อัพเดท', $account, TRUE);
คืน $return_as_object ? $result : $result->isAllowed();
}
}
ไฟล์ config/schema/module_test.schema.yml ดังนี้:
action.configuration.module_test:
ประเภท: node_action
ป้ายกำกับ: 'การดำเนินการของฐานข้อมูล'
config/install/system.action.node_action.yml
รหัสภาษา: th
สถานะ: จริง
การพึ่งพา:
โมดูล:
- โหนด
รหัส: node_action
ป้ายกำกับ: 'ส่งออกเนื้อหา'
ชนิด: โหนด
ปลั๊กอิน: node_action
การกำหนดค่า: { }
อย่างไรก็ตาม หลังจากอัพเดตหนึ่งโหนด มีสองสิ่งเกิดขึ้น:
- ตัวแปร $node ของ method execute จะเป็นค่า null เสมอ ไม่เข้าถ้า.
- ตัวแปร $object ของวิธีการเข้าถึงจะเป็นค่าว่างเสมอ โยนข้อผิดพลาดใน $result = $object->access('update', $account, TRUE);
ฉันไม่ทราบว่าการดำเนินการนี้ใช้ได้เฉพาะกับการดำเนินการจำนวนมากหรือไม่แต่เป้าหมายของฉันคือดำเนินการทุกครั้งที่ฉันอัปเดตโหนดเท่านั้น ฉันมาถูกทางแล้วโดยใช้การดำเนินการหรือไม่ เอกสาร Drupal ดูเหมือนจะไม่ง่ายสำหรับฉัน
ขอบคุณ!