web-dev-qa-db-ja.com

Entity Drupal Wrapperクラスから派生したタイプのオブジェクトを検査する良い方法はありますか?

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

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

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

develの出力はあまり役に立ちません。

screenshot

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

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

私はdebug()を試してみましたが、PHPユーザー通知が次のように表示されます:

screenshot 2

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

これらのタイプのオブジェクトを(できればKrumoで)検査して、使用可能なプロパティを確認するにはどうすればよいですか?または、dvm()を使用してスタックしていますか?

38
Clive

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

the docs にあります。

38
TwiiK

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
Shoaib Nawaz

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

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

誰かがそれが便利だと思うことを願っています。

4
Armadillo Jim

ラッパーを「強化」している元のオブジェクトを検査したい場合は、以下を試してください。

dpm($wrapper->raw())

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

3
Nick

Inspect モジュールは、デバッグするデータの適切な構造ビューを提供します。

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

3
Lars Nielsen

devel patch があります。これにより、Krumoはすべてのプライベートプロパティと保護プロパティを表示できます。

drupal.orgのスレッドです

このパッチはとても役に立ちました。

2
Felix Eve

drupal cliを使用します

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