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?


Ü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.


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


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.


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


2

Die get_object_vars () verbessern auch die Visualisierung.

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

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

2

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


1

Verwenden Sie einfach echo serialize ($ user);

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.