8

非常に奇妙な問題があります。Doctrine オブジェクトをvar_dump(またはprint_r) しようとすると、Apache が空の空白ページ (200 OK ヘッダー) で応答します。var_dump次のような通常のphp varを使用できます。

$dummy = array("a" => 1, "b" =>2);

そして、それはうまくいきます。$connection->query()しかし、Doctrine クラスのオブジェクト ( の結果や、Doctrine を使用したオブジェクト モデルのクラスのインスタンスなど)を使用することはできません。

なぜこれが起こるのか誰にも分かりますか?

4

4 に答える 4

51

遅延ロード プロキシには常に Doctrine の EntityManager のインスタンスとそのすべての依存関係が含まれます。

したがって、 avar_dumpはレンダリングと読み取りが不可能な非常に大きな再帰構造をダンプする可能性があります。\Doctrine\Common\Util\Debug::dump()ダンピングを人間が読めるレベルに制限するために使用する必要があります。この関数のデフォルトの深さは 2 に設定されていることに注意してください (これは 2 番目のパラメーターです)。

于 2011-12-27T15:02:01.260 に答える
9

クラスのtoArrayメソッドを使用するDoctrine_Record

var_dump($doctrine_record->toArray());

DBフィールドのみを表示し、完全なDoctrine内部のダンプを回避します(自己参照/再帰を含む)

于 2010-09-26T18:11:01.077 に答える
1

print_r()自己参照オブジェクトを作成しようとすると、ループに入り、メモリが不足することがあります。おそらくそれがあなたに起こっていることです。

メモリ制限()を増やしてみて、ini_set('memory_limit', '256M');それで修正されるかどうかを確認してください。

編集:これに対する実際の修正はないと思います-再帰の深さを制限しない(または少なくとも適切に行わない) PHPの内部var_dump/です。XDebugprint_r拡張機能をインストールすると、組み込みを再帰をより適切に処理するバージョンに置き換えることができます。var_dump

于 2008-10-19T13:29:22.090 に答える
0

オブジェクトが Doctrine_Collection のインスタンスであることが確実な場合は、toArray を使用できます。Xdebug はドクトリン レコードには役立ちません。

私が提案する方法は、必要に応じて Doctrine_Record::toArray() を使用してオブジェクトを印刷するカスタム再帰関数を実装することです

function var_dump_improved()
{
   foreach (func_get_args() as $arg) {
       if ($args instanceof Doctrine_Collection) {
          print_r($arg);
       } else if ( $arg instanceof Traversable || is_array($arg) ) {
          // do a foreach and recall var_dump_improved on subelements
       } else if (...) {
          // other types
       } 
   }   
}

最大ネストレベルでデバッグする再帰関数はこちら

http://php.net/manual/en/function.var-dump.php

コメントを見て、「再帰」を探してください

于 2012-01-10T01:35:48.993 に答える