เหตุการณ์การตั้งค่าสถานะไม่เกี่ยวข้องกับการตอบกลับ ดังนั้นคุณจึงไม่สามารถส่งคืนเหตุการณ์จากที่นั่นได้ วิธีการที่แตกต่างกันคือการ สร้างผู้สมัครสมาชิกเส้นทาง, และเปลี่ยน flag.action_link_flag และ flag.action_unlink_flag เส้นทาง แทนที่ตัวควบคุมด้วยตัวควบคุมที่คุณกำหนดเอง เช่น
ฟังก์ชันที่ได้รับการป้องกัน alterRoutes (RouteCollection $collection) {
ถ้า ($route = $collection->get('flag.action_link_flag')) {
$route->setDefault('_controller', 'Drupal\custom_module\Controller\CustomController::flag');
}
ถ้า ($route = $collection->get('flag.action_link_flag')) {
$route->setDefault('_controller', 'Drupal\custom_module\Controller\CustomController::unflag');
}
}
ตัวควบคุมที่กำหนดเองของคุณจะขยายตัวควบคุมแฟล็กเดิม (Drupal\flag\Controller\ActionLinkController) ใช้เมธอดเพื่อสร้างการตอบกลับดั้งเดิม แล้วต่อท้ายคำสั่ง JS ของคุณ
คลาส CustomController ขยาย ActionLinkController {
ธงฟังก์ชันสาธารณะ (FlagInterface $flag, $entity_id) {
$response = parent::flag($flag, $entity_id);
$response->addCommand(...);
ส่งคืน $response;
}
// เหมือนกันสำหรับการ unflag()
}
เพื่อความครอบคลุมทั้งหมด คุณอาจต้องทำสิ่งที่คล้ายกันกับ flag.action_link_flag_nojs และ flag.action_link_unflag_nojs เส้นทาง. แต่ถ้าฟังก์ชันการทำงานของคุณเป็น JS ล้วน ๆ และไม่จำเป็นต้องมีอยู่สำหรับผู้ใช้ที่ไม่มีฟังก์ชันดังกล่าว คุณก็ไม่จำเป็นต้องกังวล