EntityDrupalWrapper sınıfından türetilmiş nesneleri incelemek için iyi bir yol var mı?


38

Bu sorunun diğer karmaşık nesne türleri için de geçerli olduğuna eminim, ancak EntityDrupalWrapperşu anda birlikte çalıştığım soru . Bu, döndürülen nesnenin türüdür entity_metadata_wrapper()(ve muhtemelen diğerleri).

Aşağıdaki gibi bir kod kullanırken:

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

Devel’den çıkan sonuç hiç de yardımcı değil:

ekran görüntüsü

dpm()Örneğin bir stdClassnesneyle yapılan bir arama için ne görmeyi beklediğinizi göstermez .

Benzer bir çağrı dvm(), nesneyi yazdırıyor ancak aşina olmadığım bir şekilde ve çok okunamıyor.

Denedim debug()ve buna benzeyen bir PHP kullanıcısı uyarısı üretti:

ekran görüntüsü 2

Bu arada, bu uyarıda bulunan HTML çıktısı dvm(), ekrana basan çıktı ile aynıdır .

Bu tür nesneleri (tercihen Krumo ile) nasıl inceleyebilirim, böylece hangi özelliklerin kullanılabilir olduğunu görebilirim? Yoksa sıkışıp dvm()mı kaldım ?


Drupal 7'de tanıtılan hata ayıklamayı () deneyin
Shoaib Nawaz

Thanks @ShuaibNawaz, korktuğum halde bununla daha az başarı (soruyu güncelledim)
Clive

2
Evet, sarmalayıcı sınıflarındaki sorunlardan biri de bu. dpm () / krumo yalnızca genel mülkleri görür. Sarıcı sınıflarındaki her şey magic __get () ve __set () yöntemleriyle korunur ve erişilir.
Berdir

@Berdir bundan korkuyordum; Bakmadım ama çok kokuyordu __get()ve __set()ilgiliydiler. Hangi sarmalayıcı için hangi sınıf özelliklerinin mevcut olduğunu bulmak için tercih ettiğiniz bir yöntem var mı? Yoksa bu sadece tecrübeye dayalı bir 'bilme' meselesi midir?
Clive

1
@Berdir Bundan haberdar edileceğinizi sanmıyorum, kullanabilirsiniz dpm($wrapper->getPropertyInfo());, gerçekten yardımcı olur
Clive

Yanıtlar:


38

Dpm ($ sarmalayıcı-> getPropertyInfo ());

Bu öyle docs .


Ve düğümünüzden belirli alanları incelemek için kullanabileceğinizkpr($wrapper->my_custom_field->value());
wranvaud

4

EntityDrupalWrapper nesnelerle oynuyordum. debug () genellikle __toString () tarafından hazırlanan çıktıyı döndürür.

Foreach kullanarak EntityDrupalWrapper nesnesini yineledim ve özelliklerin adının listelenmesine yardımcı oldum.

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

İşte $objbir tür nesneEntityValueWrapper

$ obj $ obj-> value () ile okunabilir ve $ obj-> set ('değer') ile yazılabilir;

DÜZENLE:


Sarıcınızı ikinci paragrafı geçmeden yarattıysanız, yani entity_metadata_wrapper ('commerce_order');
Daha sonra set ve değer yöntemleri uygulanmadıkları için istisna atar.


4

Kaydırıcıyı açmak için kendi küçük widget'ımı yazarken yaralandım:

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));

Birisi onu yararlı bulur umarım.


3

Kontrol modülü ayıklamak istediğiniz verilerin bir güzel yapısal bir görünüm sağlar.

Eğitici ve iyi biçimlendirilmiş değişken dökümlerini, derin yığın izlerini ve yürütme zaman profillerini alın - veritabanı günlüğüne (Raporlar / Son günlüğü mesajları), dosyaya veya ekrana.


3

Sarıcıya "güç veren" orijinal nesneyi incelemek istiyorsanız, şunu deneyin:

dpm($wrapper->raw())

Bu benim için iyi çalışıyor.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.