Poate fi mai ușor să începeți cu un exemplu.
Funcția entity_metadata_wrapper() pare să facă multă magie complexă în spatele scenei pentru a returna un obiect cu toate datele legate de entitatea în cauză. Dar de unde știu ce proprietăți și metode sunt disponibile pentru mine odată ce obiectul este returnat?
Să presupunem că am Comerț de Comerț. (Aceasta nu este neapărat o întrebare de comerț, este doar bună ca exemplu). La finalizare, vreau să verific dacă comanda conține un articol rând de un anumit tip de produs și să notific utilizatorul.Poate vreau să compar și prețul calculat al articolului rând cu prețul inițial din tipul de produs.
Ok, așa e Ordin, Elemente rând, Tip produs, și Utilizator care sunt toate entități la care se face referire. Tipul de produs are mai multe câmpuri personalizate, poate că acestea sunt referințe la o altă entitate, cum ar fi informațiile de facturare.
$comandă_înveliș = entity_metadata_wrapper('comandă_comerț', $comanda);
Conform documentelor Entity API, toate acele entități la care se face referire sunt acum incluse în obiect, gata pentru mine să le folosesc datorită wrapper-ului.
Dar de unde știu cum să accesez o valoare pe care o caut sau unde se află în structura obiectului? Toate câmpurile drupal la care se face referire sunt numele mașinii lor după design? Știu că înlănțuirea trebuie să joace un rol, deci cum intervine asta? Și nu s-ar schimba această structură de fiecare dată când entity_metadata_wrapper este apelată, având în vedere că entitatea în cauză ar putea referi în mod arbitrar la alte entități (care fac referire la alte entități etc.)? Și dacă structura este arbitrară, orice cod care s-a bazat pe acea structură la un moment dat, dacă se schimbă, nu va rupe codul?
În cele din urmă, văd referiri la lucruri de genul ->salvare()
și ->valoare()
în documentele Entity API, dar nu pot găsi o referință la setul complet de metode disponibile pentru mine. Există vreo structură logică pentru a descoperi acest lucru sau trebuie să folosesc ceva de genul xdebug de fiecare dată (și dacă o fac, asta tot nu mă anunță ce metode sunt disponibile pentru a acționa asupra datelor). Acesta este pentru D7, dar dacă un răspuns D8+ ar putea adăuga claritate, vă rugăm să furnizați.