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:
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:
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()
?
Utilisez dpm ($ wrapper-> getPropertyInfo ());
C'est dans la documentation .
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.
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.
Si vous souhaitez inspecter l'objet d'origine qui "alimente" le wrapper, essayez:
dpm($wrapper->raw())
Cela fonctionne bien pour moi.
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.
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.
Utilisez le drupal cli
$ drupal debug:entity
// Displays current events