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.


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.


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


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.


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


2

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

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

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

2

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


1

Utilisez simplement echo serialize ($ user);

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.