Za dużo danych z var_dump w symfony2 doctrine2

100

Mam około 40 jednostek i wiele relacji dwukierunkowych. Za każdym razem, gdy używam var_dump ($ user) lub jakiejkolwiek jednostki, moja przeglądarka jest ładowana zbyt dużą ilością danych tablic i zmiennych, po prostu się zawiesiła.

chcę, w czym problem.

Dane są wstawiane prawidłowo. Czy mogę spowodować problem w produkcji?

Miraż
źródło
O jakiej przeglądarce mówimy?
Madara's Ghost
3
Czy używasz xdebug? Jeśli nie, rozważ użycie go i zamiast var_dump po prostu skorzystaj z debuggera kroków w środowisku IDE takim jak Ecplipse, Netbeans lub PHPStorm. Wszystko to ładnie wyświetla dane zmiennych.
hakre
Co rozumiesz przez „awarię” - czy aplikacja przeglądarki (lub karta) zamyka się, nie wyświetla żadnego wyniku lub strona jest przerywana?
Jurij
moja przeglądarka wyświetla bardzo długą stronę danych zmiennych ze wszystkimi moimi elementami i tak dalej. wygląda na to, że idzie w niekończącej się pętli. próbowałem botf firefox i chrome. jeśli spróbuję innej klasy, która nie ma żadnego związku, to działa dobrze, ale w przypadku wielu relacji zawiesza komputer. Musiałem zakończyć to zadanie
Mirage
Mam klasę podstawową i moja przeglądarka też się zawiesiła. Nienawidzę tych wszystkich opóźnionych błędów.
ChocoDeveloper

Odpowiedzi:

221

Zastąp var_dump () metodą debugowania dump () dostarczoną przez Doctrine Common .

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

Działa dla pojedynczych obiektów i kolekcji Doctrine i powinno zapobiegać wyświetlaniu przez przeglądarkę problemów, które masz.

mgiagnoni
źródło
5
Możesz także dump()z MaxDepth , w dump()drugim argumencie jest MaxDepth .
MB Kakadiya
3
Jeśli wolisz, aby dane wyjściowe debugowania znajdowały się w dzienniku błędów php, użyj następujących error_log(print_r(\Doctrine\Common\Util\Debug::export($variable, $depth),1)); wskazówek: Pisanie za każdym razem jest dość kłopotliwe, ale możesz łatwo utworzyć dla niego makro.
Andrea Sprega
Ta funkcja jest bardzo pomocna! Uratował mnie również przed awariami przeglądarki.
Ren
20

dobrze sformatowany:

echo '<pre>';
\Doctrine\Common\Util\Debug::dump($user, $recurciveLevelToDisplay);
echo '</pre>';
Bouchehboun Saad
źródło
5

Prosty i łatwy przykład.

var_dump(serialize($Object));
Kentaro Ohkouchi
źródło
4

Problem polega na tym, że w relacji dwukierunkowej obie encje mają ze sobą łącze, więc podczas wyświetlania obiektu entity1 var_dump będzie musiał również wydrukować wszystkie właściwości entity2, które obejmują samą jednostkę entity1, dając pętlę.

Rad80
źródło
To jedyna odpowiedź, która wyjaśnia DLACZEGO to się dzieje.
user2342558
4

Symfony <2.6

Możesz go użyć, \Doctrine\Common\Util\Debug::dump($variable, $depth);aby wyświetlić wyniki doktryny bez informacji proxy.

Symfony> 2.6

Jeśli używasz symfony w wersji 2.6 lub nowszej, zdecydowanie radzę ci używać dump(). Pokazuje dobrze sformatowane i kolorowe wyjście, a wiersze można dynamicznie przesuwać / ukrywać. wprowadź opis obrazu tutaj

iść do
źródło
2

Funkcja get_object_vars () również poprawia wizualizację.

echo "<pre>";
\Doctrine\Common\Util\Debug::dump(get_object_vars($user));
Wellington Lorindo
źródło
2

W Symfony 2.6 możesz teraz po prostu użyć dump ($ var) w swoim kontrolerze i {{dump (var)}} w twig.

Upewnij się, że dodałeś to do swojego pliku AppKernal.php, w sekcji array ('dev', 'test').

$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
J-who
źródło
2

użyj dump ($ user) i możesz zobaczyć doskonały wynik w Symfony Profiler! powodzenia

Witalij Pugach
źródło
1

Po prostu użyj echo serialize ($ user);

AlexM
źródło