Trop de données avec var_dump dans symfony2 doctrine2

100

J'ai une quarantaine d'entités et de nombreuses relations bidirectionnelles. Chaque fois que j'utilise var_dump ($ user) ou toute entité, mon navigateur est chargé avec trop de données de tableaux et de variables, puis il plante.

je veux quel est le problème.

Les données sont insérées correctement. Puis-je causer des problèmes en production.

Mirage
la source
De quel navigateur parlons-nous?
Madara's Ghost
3
Utilisez-vous xdebug? Sinon, envisagez de l'utiliser et au lieu de var_dump, utilisez simplement le débogueur d'étape avec un IDE comme Ecplipse, Netbeans ou PHPStorm. Tout cela affichera bien les données des variables.
hakre
Qu'entendez-vous par «plantage» - l'application du navigateur (ou l'onglet) se ferme-t-elle, n'affiche-t-elle aucun résultat ou la page est interrompue?
Yuriy
mon navigateur affiche une très longue page de données variables avec toutes mes entiies et tout ça. on dirait qu'il va dans une boucle sans fin. j'ai essayé botf firefox et chrome. si j'essaye n'importe quelle autre classe qui n'a aucune relation alors ça marche bien mais avec beaucoup de relations ça gèle l'ordinateur. J'ai dû mettre fin à la tâche qui
Mirage
J'ai une classe simple et mon navigateur a également planté. Je déteste tous ces défauts retardés.
ChocoDeveloper

Réponses:

221

Remplacez var_dump () par la méthode de débogage dump () fournie par Doctrine Common .

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

Cela fonctionne pour les objets uniques et les collections Doctrine et devrait empêcher le navigateur d'afficher les problèmes que vous rencontrez.

mgiagnoni
la source
5
Vous pouvez également dump()avec MaxDepth , en dump()deuxième argument est MaxDepth .
MB Kakadiya
3
Si vous préférez avoir la sortie de débogage dans votre journal d'erreurs php, utilisez ce qui suit: error_log(print_r(\Doctrine\Common\Util\Debug::export($variable, $depth),1)); C'est assez compliqué à taper à chaque fois, mais vous pouvez facilement créer une macro pour cela.
Andrea Sprega
Cette fonction est très utile! M'a également sauvé des plantages de navigateur.
Ren
20

bien formaté:

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

Exemple simple et facile.

var_dump(serialize($Object));
Kentaro Ohkouchi
la source
4

Le problème est que dans une relation bidirectionnelle, les deux entités ont un lien entre elles, donc tout en affichant entity1, var_dump devra également imprimer toutes les propriétés de entity2, qui incluent entity1 elle-même en vous donnant une boucle.

Rad80
la source
C'est la seule réponse qui explique pourquoi cela se produit.
user2342558
4

Symfony <2.6

Vous pouvez l'utiliser \Doctrine\Common\Util\Debug::dump($variable, $depth);pour afficher la sortie de doctrine sans les informations de proxy.

Symfony> 2.6

Si vous utilisez symfony 2.6 ou plus, je vous conseille fortement d'utiliser dump(). Il montre une sortie bien formatée et colorée, et vous pouvez dynamiquement étendre / masquer les lignes. entrez la description de l'image ici

aller à
la source
2

Le get_object_vars () améliore également la visualisation.

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

Avec Symfony 2.6, vous pouvez maintenant simplement utiliser dump ($ var) dans votre contrôleur et {{dump (var)}} dans twig.

Assurez-vous de l'ajouter à votre fichier AppKernal.php, dans la section array ('dev', 'test').

$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
J-qui
la source
2

utilisez dump ($ user) et vous pouvez voir un résultat parfait dans Symfony Profiler! bonne chance

Vitaly Pugach
la source
1

Utilisez simplement echo serialize ($ user);

AlexM
la source