Încerc să creez o modalitate simplă de a executa anumite acțiuni în baza de date de fiecare dată când actualizez un nod.
M-am uitat la modulul de acțiune al Drupal, totuși nu găsesc manuale bune care să explice cum să-l folosesc.The Modulul ECA funcționează ca un mecanism de lansare a acțiunii mele, dar nu pot executa acțiunea mea și nu știu cum să procedez.
În prezent îmi creez propriul modul care va conține acțiunile mele. Următoarea clasă este clasa acțiunii mele.
<?php
spațiu de nume Drupal\my_custom_actions\Plugin\Action;
utilizați Drupal\Core\Action\ActionBase;
utilizați Drupal\Core\Session\AccountInterface;
/**
* creați acțiuni personalizate
*
* @Acțiune(
* id = "node_action",
* label = @Translation ("Acțiunea bazei de date"),
* tip = "nod"
* )
*/
clasa DBAction extinde ActionBase {
/**
* {@inheritdoc}
*/
funcția publică execute($nod = NULL) {
dacă ($nod) {
// TODO: procedură de executat în baza de date
\Drupal::messenger()->addStatus('Execuția este OK și avem nodul');
}
}
/**
* {@inheritdoc}
*/
acces la funcția publică ($obiect, AccountInterface $cont = NULL, $return_as_object = FALSE) {
/** @var \Drupal\node\NodeInterface $obiect */
// TODO: scrieți aici permisiunile dvs
$rezultat = $obiect->access('update', $cont, TRUE);
returnează $return_as_object ? $rezultat : $rezultat->este Permis();
}
}
Fișierul config/schema/module_test.schema.yml astfel:
action.configuration.module_test:
tip: node_action
etichetă: „Acțiunea bazei de date”
config/install/system.action.node_action.yml
langcode: en
stare: adevărat
dependențe:
modul:
- nod
id: node_action
etichetă: „Exportați conținut”
tip: nod
plugin: node_action
configurație: { }
Cu toate acestea, după actualizarea unui nod, se întâmplă două lucruri:
- Variabila $node a metodei execute apare întotdeauna ca nulă. Neintrund la if.
- Variabila $object a metodei de acces vine întotdeauna ca nulă. Se afișează o eroare în $result = $object->access('update', $cont, TRUE);
Nu știu dacă acțiunile funcționează doar pentru operațiuni în vrac.Dar scopul meu este să execut o acțiune numai de fiecare dată când actualizez un nod. Sunt pe drumul cel bun folosind Actions sau nu? Documentarea Drupal nu mi se pare foarte intuitivă.
Mulțumiri!