Puncte:0

Cum se ajunge entitatea la care se face referire într-un link de câmp?

drapel br

Sunt pe D9. Am un paragraf cu a Legătură camp. Trebuie să obțin entitatea la care se face referire în mod programatic.

Ceea ce am reușit până acum este:

       $nid = NULL;
       $field_link = $paragraph->get('field_link')->first();
       $route_params = $field_link->getUrl()->getRouteParameters();
        
        if(isset($route_params['nod'])) {
          $nid = $route_params['nod'];
        }

       if($nid) {
               ....
       }

Dar mi se pare destul de complicat - și mă bazez pe faptul că entitatea legată este doar de tip „nod”. Nu există vreo funcție care furnizează datele direct\ într-un mod mai robust?

Puncte:2
drapel ru

În prezent folosesc acest cod pentru o sarcină foarte similară:

/** @var $link \Drupal\Core\Url */
dacă (!$link->isRouted()) {
  /* link intern nedirecționat sau extern */
  întoarcere;
}

$rută = $link->getRouteParameters();
$entityType = cheie($rută);
$referencedEntity = NULL;
încerca {
  $referencedEntity = \Drupal::entityTypeManager()
    ->getStorage($entityType)
    ->load($route[$entityType]);
  $referencedEntity = \Drupal::service('entity.repository')
    ->getTranslationFromContext($referencedEntity);
}
prinde (Aruncabil $t) {
  /* Nu știu dacă acest lucru este necesar, dar nu știu ce iese din getRouteParameters() */
  întoarcere;
}

dacă (!($referencedEntity instanță a \Drupal\Core\Entity\ContentEntityBase)) {
  /* poate doriți să permiteți diferite tipuri de entități aici, de ex. un formular web nu este o entitate de conținut */
  întoarcere;
}

/* succes */
doStuff($referencedEntity);

Practic, același lucru pe care îl faci deja, dar poți folosi cheia pentru a obține tipul de entitate și a-l face mai generic.

4uk4 avatar
drapel cn
Excelent exemplu de cod. Pentru a face mai previzibil ceea ce este în getRouteParameters() aș verifica mai întâi getRouteName() pentru un model precum `entity.ENTITY_TYPE.canonical`.

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.