web-dev-qa-db-fra.com

Existe-t-il un bon moyen d'inspecter des objets dont le type est dérivé de la classe EntityDrupalWrapper?

Je suis sûr que cette question s'applique à d'autres types d'objets complexes, mais EntityDrupalWrapper est celui avec lequel je travaille actuellement. Il s'agit du type d'objet renvoyé par entity_metadata_wrapper() (et probablement d'autres).

Lorsque vous utilisez du code comme celui-ci:

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

la sortie de Devel n'est pas trop utile:

screenshot

Il ne montre pas ce que vous attendez d'un appel à dpm() avec, par exemple, un objet stdClass.

Un appel similaire à dvm() imprime l'objet, mais d'une manière que je ne connais pas, et ce n'est pas très lisible.

J'ai essayé debug() et cela produit un PHP avis utilisateur qui ressemble à ceci:

screenshot 2

Par ailleurs, la sortie HTML contenue dans cet avertissement est la même sortie que dvm() imprime à l'écran.

Comment puis-je inspecter ces types d'objets (de préférence avec Krumo), afin de voir quelles propriétés sont disponibles? Ou suis-je bloqué en utilisant dvm()?

38
Clive

Utilisez dpm ($ wrapper-> getPropertyInfo ());

C'est dans la documentation .

38
TwiiK

Je jouais avec des objets EntityDrupalWrapper. debug () renvoie généralement la sortie qui peut avoir été préparée par __toString ()

J'ai itéré l'objet EntityDrupalWrapper en utilisant foreach et cela a aidé à répertorier le nom des propriétés.

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

Ici $obj est un objet de type EntityValueWrapper

$ obj peut être lu par $ obj-> value () et peut être écrit par $ obj-> set ('value');

ÉDITER:

Si vous avez créé votre wrapper sans passer le deuxième paramètre
c'est à dire. entity_metadata_wrapper ('commerce_order');
puis les méthodes set et value lèveront une exception car elles ne sont pas implémentées.

4
Shoaib Nawaz

J'ai fini par écrire mon propre petit widget pour dérouler le wrapper:

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

J'espère que quelqu'un le trouvera utile.

4
Armadillo Jim

Si vous souhaitez inspecter l'objet d'origine qui "alimente" le wrapper, essayez:

dpm($wrapper->raw())

Cela fonctionne bien pour moi.

3
Nick

Le module Inspect fournit une belle vue structurelle des données que vous souhaitez déboguer.

Obtenez des vidages de variables instructifs et bien formatés, des traces de pile profondes et des profils de temps d'exécution - dans le journal de base de données (rapports/messages de journal récents), dans un fichier ou dans un écran.

3
Lars Nielsen

Il y a un patch de développement qui permet à Krumo d'afficher toutes les propriétés privées et protégées.

Voici le fil de discussion sur drupal.org

J'ai trouvé ce patch très utile.

2
Felix Eve

Utilisez le drupal cli

$ drupal debug:entity
// Displays current events 
0
Kevin howbrook