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?


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.


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


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


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


2

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

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

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.