Zu viele Daten mit var_dump in symfony2 doctrine2

100

Ich habe ungefähr 40 Entitäten und viele bidirektionale Beziehungen. Immer wenn ich var_dump ($ user) oder eine Entität verwende, wird mein Browser mit zu vielen Daten von Arrays und Variablen geladen, dann ist er einfach abgestürzt.

Ich möchte, was das Problem ist.

Die Daten werden gut eingefügt. Kann ich Probleme in der Produktion verursachen?

Fata Morgana
quelle
Über welchen Browser sprechen wir?
Madaras Geist
3
Verwenden Sie xdebug? Wenn nicht, sollten Sie es verwenden und anstelle von var_dump einfach den Step-Debugger mit einer IDE wie Ecplipse, Netbeans oder PHPStorm verwenden. All dies zeigt die Variablendaten gut an.
hakre
Was meinen Sie mit "Absturz" - wird die Browseranwendung (oder der Tab) geschlossen oder wird kein Ergebnis angezeigt oder die Seite wird unterbrochen?
Yuriy
Mein Browser zeigt eine sehr lange Seite mit Variablendaten mit all meinen Entitäten und all dem an. sieht aus wie es in einer Endlosschleife geht. Ich habe Botf Firefox und Chrome ausprobiert. Wenn ich eine andere Klasse versuche, die keine Beziehung hat, dann funktioniert es in Ordnung, aber bei vielen Beziehungen friert es den Computer ein. Ich musste die Aufgabe beenden, die
Mirage
Ich habe eine Bare-Bones-Klasse und mein Browser ist ebenfalls abgestürzt. Ich hasse all diese verzögerten Standardeinstellungen.
ChocoDeveloper

Antworten:

221

Ersetzen Sie var_dump () durch die von Doctrine Common bereitgestellte Debug-Methode dump () .

\Doctrine\Common\Util\Debug::dump($user);

Es funktioniert für einzelne Objekte und Doctrine-Sammlungen und sollte verhindern, dass im Browser Probleme angezeigt werden.

mgiagnoni
quelle
5
Sie können auch dump()mit MaxDepth , im dump()zweiten Argument ist MaxDepth .
MB Kakadiya
3
Wenn Sie es vorziehen, die Debug-Ausgabe in Ihrem PHP-Fehlerprotokoll zu haben, verwenden error_log(print_r(\Doctrine\Common\Util\Debug::export($variable, $depth),1)); Sie Folgendes: Es ist ziemlich umständlich, jedes Mal zu tippen, aber Sie können leicht ein Makro dafür erstellen.
Andrea Sprega
Diese Funktion ist sehr hilfreich! Hat mich auch vor Browserabstürzen gerettet.
Ren
20

gut formatiert:

echo '<pre>';
\Doctrine\Common\Util\Debug::dump($user, $recurciveLevelToDisplay);
echo '</pre>';
Bouchehboun Saad
quelle
5

Einfaches und leichtes Beispiel.

var_dump(serialize($Object));
Kentaro Ohkouchi
quelle
4

Das Problem ist, dass in einer bidirektionalen Beziehung beide Entitäten eine Verknüpfung zueinander haben. Während der Anzeige von entity1 muss var_dump auch alle Eigenschaften von entity2 drucken, einschließlich entity1 selbst, wodurch Sie eine Schleife erhalten.

Rad80
quelle
Dies ist die einzige Antwort, die erklärt, warum es passiert.
user2342558
4

Symfony <2.6

Sie können \Doctrine\Common\Util\Debug::dump($variable, $depth);es verwenden, um die Doktrinausgabe ohne die Proxy-Informationen anzuzeigen.

Symfony> 2.6

Wenn Sie Symfony 2.6 oder höher verwenden, empfehle ich Ihnen dringend, diese zu verwenden dump(). Es zeigt eine gut formatierte und farbige Ausgabe, und Sie können Zeilen dynamisch ausgeben / ausblenden. Geben Sie hier die Bildbeschreibung ein

gehe zu
quelle
2

Die get_object_vars () verbessern auch die Visualisierung.

echo "<pre>";
\Doctrine\Common\Util\Debug::dump(get_object_vars($user));
Wellington Lorindo
quelle
2

Mit Symfony 2.6 können Sie jetzt einfach dump ($ var) in Ihrem Controller und {{dump (var)}} in twig verwenden.

Stellen Sie sicher, dass Sie dies zu Ihrer AppKernal.php-Datei im Abschnitt Array ('dev', 'test') hinzufügen.

$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
J-wer
quelle
2

Verwenden Sie dump ($ user) und Sie können das perfekte Ergebnis in Symfony Profiler sehen! Viel Glück

Vitaly Pugach
quelle
1

Verwenden Sie einfach echo serialize ($ user);

AlexM
quelle