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.