Puncte:1

Este „event_subscriber” o convenție de denumire rezervată pentru servicii? Există linii directoare de urmat?

drapel cn

Așa că lucram la un proiect astăzi și un abonat la un eveniment pe care îl scrisesem cu aproape un an în urmă a fost hotărât să nu mai fie concediat. Iată definiția:

Servicii:
  my_module.event_subscriber:
    clasa: Drupal\my_module\EventSubscriber\XYZFeeds
    Etichete:
      - { nume: event_subscriber }

Am trecut prin depanarea normală și am constatat că evenimentul nu a fost adăugat la registry. Depanarea ulterioară a descoperit că având numele conține abonat_eveniment a făcut ca acesta să nu fie ridicat. Dacă aș schimba asta cu altceva, ar funcționa, de exemplu:

Servicii:
  my_module.my_module_xyz_subscriber:
    clasa: Drupal\my_module\EventSubscriber\XYZFeeds
    Etichete:
      - { nume: event_subscriber }

Nu găsesc nicio documentație care să afirme în mod explicit că nu puteți utiliza acea expresie într-un nume de serviciu. Singura convenție de care știu este să prefixez întotdeauna numele serviciului cu modulul din care provine.

S-a schimbat ceva de la D8 la D9 sau acest lucru provine din componentele Symfony Framework care fac parte din Drupal?

Jaypan avatar
drapel de
Cum arată declarația ta de service?
drapel cn
@Jaypan a actualizat întrebarea cu fragmente de cod înainte/după.
4uk4 avatar
drapel cn
`my_module.event_subscriber` ar putea fi rezervat deoarece este deja în uz.
Puncte:2
drapel cn

Nu pare să fie rezervat/dezautorizat de Drupal sau Symfony - acest lucru funcționează bine pentru mine în 9.3.13 după ce am adăugat codul și am reconstruit memoria cache (fără pași suplimentari):

custom_module.services.yml

Servicii:
  custom_module.event_subscriber:
    clasa: Drupal\custom_module\EventSubscriber\XYZFeeds
    Etichete:
      - { nume: event_subscriber }

src/EventSubscriber/XYZFeeds.php

<?php

spațiu de nume Drupal\modul_personalizat\EventSubscriber;

utilizați Drupal\Core\Config\ConfigCrudEvent;
utilizați Drupal\Core\Config\ConfigEvents;
utilizați Symfony\Component\EventDispatcher\EventSubscriberInterface;

clasa XYZFeeds implementează EventSubscriberInterface {

  funcție publică statică getSubscribedEvents() {
    întoarcere [
      ConfigEvents::SAVE => 'configSave',
      ConfigEvents::DELETE => 'configDelete',
    ];
  }


  funcția publică configSave(ConfigCrudEvent $event) {
    $config = $event->getConfig();
    \Drupal::messenger()->addStatus('Configurație salvată: ' . $config->getName());
  }

  funcția publică configDelete(ConfigCrudEvent $event) {
    $config = $event->getConfig();
    \Drupal::messenger()->addStatus('Configurație ștearsă: ' . $config->getName());
  }

}

Acest lucru produce mesajele așteptate la config save/delete, așa că se pare că problema dvs. este ceva mai localizat.

O idee pentru depanare ulterioară care vă vine în minte este să verificați dacă nu aveți niciun cod personalizat (sau chiar contributiv) care modifică serviciul, poate chiar eliminându-l. Acest lucru se poate face folosind a furnizor de servicii, deci grep-ing folderele relevante pentru Furnizor de servicii poate fi un prim pas.

De asemenea, ar merita un test pentru a schimba prima parte a ID-ului mai degrabă decât a doua, pentru a vedea dacă este într-adevăr abonat_eveniment asta cauzează problema sau șirul în ansamblu:

Servicii:
  my_module_test.event_subscriber:
    clasa: Drupal\my_module\EventSubscriber\XYZFeeds
    Etichete:
      - { nume: event_subscriber }

Dacă versiunea modificată funcționează cu .abonat_eveniment, cel puțin ați exclus asta ca problemă.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.