Czy istnieje dobry sposób na sprawdzenie obiektów, których typ pochodzi od klasy EntityDrupalWrapper?


38

Jestem pewien, że to pytanie dotyczy innych złożonych typów obiektów, ale z EntityDrupalWrappertym obecnie pracuję. Jest to typ obiektu zwracanego przez entity_metadata_wrapper()(i prawdopodobnie inne).

Podczas korzystania z kodu w następujący sposób:

$order_wrapper = entity_metadata_wrapper('commerce_order', $order_object);
dpm($order_wrapper);

dane wyjściowe z Devel nie są zbyt pomocne:

zrzut ekranu

Nie pokazuje, czego można się spodziewać po wywołaniu dpm()na przykład z stdClassobiektem.

Podobne wywołanie dvm()powoduje wydrukowanie obiektu, ale w pewien sposób nie jestem zaznajomiony i nie jest zbyt czytelny.

Próbowałem debug()i generuje komunikat PHP, który wygląda mniej więcej tak:

zrzut ekranu 2

Nawiasem mówiąc, wynik HTML zawarty w tym ostrzeżeniu jest tym samym wyjściem, dvm()co na ekranie.

Jak mogę sprawdzić tego rodzaju obiekty (najlepiej za pomocą Krumo), aby zobaczyć, jakie właściwości są dostępne? A może utknąłem przy użyciu dvm()?


try debug () wprowadzony w Drupal 7
Shoaib Nawaz

Dzięki @ShuaibNawaz, jeszcze mniej sukcesów z tym, chociaż się obawiam (zaktualizowałem pytanie)
Clive

2
Tak, to dokładnie jeden z problemów z klasami opakowań. dpm () / krumo widzi tylko właściwości publiczne. Wszystko w klasach opakowań jest chronione i dostęp za pomocą magicznych metod __get () i __set ().
Berdir

@Berdir Bałem się tego; Nie wyglądałem, ale pachniało bardzo __get()i __set()byłem zaangażowany. Czy poza zainteresowaniem masz jakiś preferowany sposób sprawdzenia, jakie właściwości klasy są dostępne dla danego opakowania? A może chodzi tylko o „wiedzę” opartą na doświadczeniu?
Clive

1
@Berdir Nie sądzę, że zostaniesz o tym powiadomiony, możesz go użyć dpm($wrapper->getPropertyInfo());, to naprawdę pomaga
Clive

Odpowiedzi:



4

Bawiłem się obiektami EntityDrupalWrapper. debug () zwykle zwraca dane wyjściowe, które mogły zostać przygotowane przez __toString ()

I iterowałem obiekt EntityDrupalWrapper za pomocą foreach i pomogło to wyświetlić listę właściwości.

foreach($order_wrapper as $name => $obj){
  debug($name);
  debug(get_class($obj)); //EntityValueWrapper
}

Oto $objobiekt typuEntityValueWrapper

$ obj można odczytać za pomocą $ obj-> wartość () i można zapisać za pomocą $ obj-> set ('wartość');

EDYTOWAĆ:

Jeśli utworzyłeś opakowanie bez
podania drugiego parametru, tj. Entity_metadata_wrapper ('commerce_order');
następnie metody set i value wygenerują wyjątek, ponieważ nie są zaimplementowane.


4

Skończyło się na pisaniu własnego małego widżetu, aby rozwinąć opakowanie:

function _wrapper_debug($w) {
  $values = array();
  foreach ($w->getPropertyInfo() as $key => $val) {
    $values[$key] = $w->$key->value();
  }
  return $values;
}

dpm(_wrapper_debug($some_object_wrapper));

Mam nadzieję, że ktoś uzna to za przydatne.


3

Sprawdzić moduł zapewnia piękny widok strukturalną dane chcesz debugować.

Uzyskaj pouczające i dobrze sformatowane zrzuty zmiennych, ślady głębokiego stosu i profile czasu wykonania - do dziennika bazy danych (Raporty / Najnowsze komunikaty dziennika), do pliku lub do ekranu.


3

Jeśli chcesz sprawdzić oryginalny obiekt, który „zasila” opakowanie, spróbuj:

dpm($wrapper->raw())

To działa dobrze dla mnie.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.