Puncte:0

Modul optim de a obține definiția câmpului unui tip de conținut

drapel in

Când am nevoie de definirea câmpului unui tip de conținut în Drupal 8+, obișnuiam să rulez următorul cod (pentru obținerea câmpului „corp” în tipul de conținut „pagină”):

$page_fields = \Drupal::getContainer()->get('entity_field.manager')
               ->getFieldDefinitions('nod', 'pagina'); 
$body_definition = $page_fields['body'];

Am învățat că este posibil și rulând următorul cod:

$body_definition = \Drupal::entityTypeManager()
                  ->getStorage('field_config')
                  ->load('node.page.body');

Acum întrebarea mea este, care este avantajul unuia față de celălalt? Acesta din urmă este, desigur, doar un rând, dar asta nu poate fi sfârșitul poveștii, cred. Este una dintre aceste moduri „calea Drupal”?

Puncte:2
drapel cn

Definițiile câmpurilor pot fi definite în diferite locuri. Primul exemple de cod primește toate definițiile, al doilea exemplu de cod doar o definiție specifică de câmp și găsește doar câmpurile configurate.

Serviciul entity_field.manager este responsabil pentru descoperirea câmpurilor în mai multe locații, configurație și o mulțime de metode diferite în cod, care ar putea fi extinse în viitor pentru a găsi și mai multe. Deci utilizarea acestui serviciu este cea mai generică modalitate de a obține definiții de câmp.

Utilizare \Drupal doar în cârlige, nu la cursuri. Și apoi puteți face referire la servicii prin \Drupal::service('entity_field.manager'), nu trebuie să obțineți containerul.

Paul avatar
drapel in
Mulțumesc mult, 4k4. Din curiozitate, unde altcineva ar putea fi definit un câmp dacă nu în configurația (db)? Aceasta include fișierele de configurare, de exemplu dacă a existat un câmp definit într-un fișier yml (neimportat încă)?
4uk4 avatar
drapel cn
Nu, managerul de câmp nu citește direct fișierele YAML, ci doar configurația activă în db. În mod normal, câmpurile de bază sunt definite în clasa de entitate și câmpurile de pachet în config. Dar există o mulțime de alte metode pentru a crea sau modifica definițiile câmpurilor. De exemplu, câmpurile de pachete pot fi definite și în clasa de entități. De asemenea, în cârlige. Dar acest lucru este rar folosit.

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.