Puncte:0

Cum se folosesc metode din clasa de entitate dacă nu are un astfel de serviciu?

drapel ng

Scriu un EventSubscriber pentru entitatea de configurare a modulului de domeniu. Scopul meu este să inserez câteva date în configurația sa la evenimentul preSave (devine din patch-ul pentru D9).

Iată codul meu din clasa ConfigEventSubscriber a modulului meu personalizat:


spațiu de nume Drupal\modul_personalizat\EventSubscriber;

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

 clasa ConfigEventSubscriber implementează EventSubscriberInterface {

   funcția publică __construct(Domeniu $domeniu) {
     $acest->domeniu = $domeniu;
   }
   /**
   * {@inheritdoc}
   *
   * @return matrice
   * Numele evenimentelor de ascultat și metodele care ar trebui executate.
   */
  funcție publică statică getSubscribedEvents() {
    întoarcere [
      ConfigEvents::PRESAVE => 'configPreSave'
    ];
  }

  /**
   * Reacționează la un obiect de configurare care este salvat.
   *
   * @param \Drupal\Core\Config\ConfigCrudEvent $event
   * Configurare eveniment crud.
   */
  funcția publică configPreSave(ConfigCrudEvent $event) {
    $config = $event->getConfig();
    $domain_id = $config->getOriginal('id');
    if ($config->getStorage()->listAll('domain.record.')) {
      $this->domain->addDependencyTrait('module', 'country_path');
      $this->domain->setThirdPartySetting('country_path', 'domain_path', $domain_id);
    }
  }
 }

Iată fișierul meu services.yml:

Servicii:
  Drupal\modul_personalizat\EventSubscriber\ConfigEventSubscriber:
    Etichete:
      - { nume: 'event_subscriber' }
    argumente: ['@domain.element_manager']

Aruncă o eroare acea instanță a DomainElementManager dată, dar entitatea Domain se aștepta și este logic, în măsura în care includ $domain instanța Domain în constructul meu. Dar, am nevoie de clasa Domain pentru a utiliza aceste metode:

addDependency, setThirdPartySettings.

Deci, întrebarea mea este cum să folosesc corect aceste metode în contextul sarcinii mele?

Orice ajutor este apreciat.

beltouche avatar
drapel cn
Dacă nu puteți obține domeniul direct ca serviciu, puteți obține de la un serviciu existent? De exemplu, dacă managerul de domeniu are o metodă `getDomain()`, puteți rescrie clasa pentru a injecta managerul și a scoate domeniul din constructor.
Yaroslav avatar
drapel ng
Din păcate, nu are o astfel de metodă. Această metodă există în DomainAliasInterface, dar nu este declarată și în services.yml al modulului său.
4uk4 avatar
drapel cn
Chiar dacă nu aveți metodele unei entități de domeniu complet încărcate, ar trebui să puteți obține și să setați toate setările de configurare, precum și setările terților: `$config->get('third_party_settings')`
Yaroslav avatar
drapel ng
Multumesc, m-a ajutat foarte mult. Am folosit metoda $config->set() și am transmis datele necesare.

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.