Frage

Ich habe ein sehr seltsames Problem, wenn ich versuche, (oder var_dump) print_r eine Lehre Objekt, meine Apache-Antworten mit einer leeren leeren Seite (200 OK-Header). Ich kann einen normalen php var var_dump wie:

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

Und es funktioniert gut. Aber ich kann nicht mit einem Objekt aus jeder Lehreklasse, (wie ein Ergebnis von $connection->query() oder einer Instanz einer Klasse von meinem Objektmodell mit Lehre).

Jeder weiß, warum dies geschieht?

War es hilfreich?

Lösung

Ich habe manchmal hatte, dass beim Versuch, ein sich selbst verweisende Objekt print_r() - es wird in eine Schleife und läuft aus dem Speicher. Möglicherweise das ist, was mit Ihnen geschieht.

Versuchen Sie, die Speichergrenze zu erhöhen (ini_set('memory_limit', '256M');) und sehen, ob es das behebt.

Edit: Ich glaube nicht, dass es für diese ein tatsächliches fix ist - es PHP internen var_dump / print_r ist, die keine Tiefe auf Rekursion begrenzen (oder Sie es nicht richtig machen, zumindest). Wenn Sie die XDebug Erweiterung, kann dies die eingebauten in var_dump mit einer Version ersetzen, die Rekursion viel besser behandelt.

Andere Tipps

Lazy Load-Proxies immer eine Instanz Lehre der EntityManager enthalten und alle seine Abhängigkeiten.

Daher ist ein var_dump wird möglicherweise eine sehr große rekursive Struktur-Dump, die unmöglich zu machen und zu lesen. Sie haben \Doctrine\Common\Util\Debug::dump() zu verwenden, um das Dumping zu einer für Menschen lesbaren Ebene zu beschränken. Beachten Sie, dass für diese Funktion die Standardtiefe auf 2 gesetzt ist (es ist der zweite Parameter)

Mit der toArray Methode der Doctrine_Record Klasse

var_dump($doctrine_record->toArray());

wird nur die DB-Felder angezeigt werden und vermeiden Sie die vollständige Lehre Interna Dumping (enthält Selbstreferenz / Rekursion btw)

Sie können toArray verwenden, wenn Sie das Objekt sicher sind, eine Instanz von Doctrine_Collection ist. Xdebug nicht mit Lehre Aufzeichnungen helfen.

So wie ich vorschlagen, ist eine benutzerdefinierte rekursive Funktion implementierende Objekt zu drucken, die Doctrine_Record :: toArray () verwenden, wenn neeeded

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
       } 
   }   
}

Einige rekursive Funktion zu debuggen mit max Schachtelungsebenen sind hier

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

Schauen Sie sich die Kommentare, suchen Sie nach "Rekursion"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top