EntityDrupalWrapperクラスから派生した型のオブジェクトを検査する良い方法はありますか?


38

この質問は他の複雑なオブジェクトタイプにも当てはまるとEntityDrupalWrapper思いますが、現在取り組んでいるものです。これはentity_metadata_wrapper()(そしておそらく他の)によって返されるオブジェクトのタイプです。

次のようなコードを使用する場合:

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

Develからの出力はあまり役に立ちません:

スクリーンショット

dpm()たとえば、stdClassオブジェクトを使用した呼び出しで期待されるものは表示されません。

への同様の呼び出しdvm()は、オブジェクトを印刷しますが、私が慣れていない方法で、非常に読みにくいです。

私が試したところdebug()、次のようなPHPユーザー通知が生成されました。

スクリーンショット2

ちなみに、その警告に含まれるHTML出力はdvm()、画面に出力されるのと同じ出力です。

これらのタイプのオブジェクトを(できればKrumoで)検査するにはどうすればよいですか?それとも私は使用し続けていdvm()ますか?


Drupal 7で導入されたdebug()を試してください
Shoaib Nawaz

@ShuaibNawazに感謝しますが、私は恐れていますが(質問を更新しました)
クライブ

2
うん、それはまさにラッパークラスの問題の1つです。dpm()/ krumoはパブリックプロパティのみを参照します。ラッパークラスのすべてが保護され、魔法の__get()および__set()メソッドを介してアクセスされます。
ベルディール

@Berdir私はそれを恐れていました。私は見ていなかったが、それはのようにたくさんの匂いでした__get()し、__set()関与していました。興味深いことに、どのラッパーがどのクラスプロパティを使用できるかを見つけるための好ましい方法はありますか?それとも、経験に基づいて「知る」だけの問題ですか?
クライブ

1
@Berdirこれについて通知されるとは思わない、使用できるdpm($wrapper->getPropertyInfo());、それは本当に物事を助ける
クライブ

回答:


38

dpm($ wrapper-> getPropertyInfo());を使用します。

それは中だドキュメント


そして、ノードから特定のフィールドを検査するために使用できますkpr($wrapper->my_custom_field->value());
-wranvaud

4

私はEntityDrupalWrapperオブジェクトで遊んでいました。debug()は通常、__ toString()によって準備された出力を返します

foreachを使用してEntityDrupalWrapperオブジェクトを反復処理し、プロパティの名前を一覧表示するのに役立ちました。

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

ここ$objにタイプのオブジェクトがありますEntityValueWrapper

$ objは、$ obj-> value()で読み取ることができ、$ obj-> set( 'value');で書き込むことができます。

編集:

2番目の
パラメーターを渡さずにラッパーを作成した場合、つまりentity_metadata_wrapper( 'commerce_order');
setメソッドとvalueメソッドは実装されていないため、例外をスローします。


4

私は自分の小さなウィジェットを書いてラッパーを展開しました。

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

誰かがそれを役に立つと思うことを願っています。


3

点検モジュールがデバッグしたいデータの素敵な構造図を提供します。

有益で適切にフォーマットされた変数ダンプ、詳細なスタックトレース、および実行時間プロファイルを取得します-データベースログ(レポート/最近のログメッセージ)、ファイル、または画面へ。


3

ラッパーを「動かしている」元のオブジェクトを検査する場合は、次を試してください。

dpm($wrapper->raw())

これは私にとってはうまくいきます。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.