Evenimentele de semnalare nu se ocupă de răspunsuri, așa că nu veți putea returna unul de acolo. O abordare diferită este să creați un abonat de rută, și modificați flag.action_link_flag și flag.action_unlink_flag rute, înlocuirea controlerului cu unul personalizat, de ex.
funcția protejată alterRoutes(RouteCollection $colecție) {
dacă ($rută = $colecție->get('flag.action_link_flag')) {
$route->setDefault('_controller', 'Drupal\custom_module\Controller\CustomController::flag');
}
dacă ($rută = $colecție->get('flag.action_link_flag')) {
$route->setDefault('_controller', 'Drupal\custom_module\Controller\CustomController::unflag');
}
}
Controlerul dvs. personalizat ar extinde controlerul de steag original (Drupal\flag\Controller\ActionLinkController), utilizați metodele sale pentru a genera răspunsul inițial și apoi puneți comanda (comenzile) JS la sfârșit.
clasa CustomController extinde ActionLinkController {
semnalizare funcție publică (FlagInterface $flag, $entity_id) {
$răspuns = parent::flag($flag, $entity_id);
$response->addCommand(...);
returnează $răspuns;
}
// Același lucru pentru unflag()
}
Pentru o acoperire completă, este posibil să trebuiască să faceți și ceva similar cu flag.action_link_flag_nojs și flag.action_link_unflag_nojs trasee. Dar dacă funcționalitatea dvs. este pur JS și nu trebuie să fie prezentă pentru utilizatorii fără ea, probabil că nu trebuie să vă deranjați.