Question

J'ai un problème très étrange lorsque j'essaie de var_dump (ou print_r ) un objet de doctrine, mes réponses Apache avec une page vierge vide (en-tête 200 OK) . Je peux var_dump une var php normale comme:

$dummy = array("a" => 1, "b" =>2);

Et ça marche bien. Mais je ne peux pas utiliser d’objet de n'importe quelle classe de Doctrine (comme un résultat de $ connection- > query () , ou une instance d’une classe de mon modèle d’objet avec Doctrine).

Quelqu'un sait pourquoi cela se produit?

Était-ce utile?

La solution

J'ai parfois eu cela en essayant de print_r () un objet auto-référençant - il entre dans une boucle et manque de mémoire. C'est peut-être ce qui vous arrive.

Essayez d'augmenter la limite de mémoire ( ini_set ('memory_limit', '256M'); ) et voyez si cela résout le problème.

Éditer: Je ne pense pas qu'il existe de solution à ce problème - c'est le var_dump / print_r interne de PHP qui ne limite pas la profondeur de la récursion (ou ne le fait pas faites-le correctement, au moins). Si vous installez l'extension XDebug , elle peut remplacer le var_dump intégré par une version. qui gère beaucoup mieux la récursivité.

Autres conseils

Les serveurs proxy de charge différée contiennent toujours une instance de EntityManager de Doctrine & # 8217; s et toutes ses dépendances.

Par conséquent, un var_dump videra probablement une très grande structure récursive qu'il est impossible de restituer et de lire. Vous devez utiliser \ Doctrine \ Common \ Util \ Debug :: dump () pour limiter le vidage à un niveau lisible par l'homme. Notez que la profondeur par défaut pour cette fonction est définie sur 2 (il s’agit du second paramètre)

Utilisez la méthode toArray de la classe Doctrine_Record

.
var_dump($doctrine_record->toArray());

affichera uniquement les champs de la base de données et évitera de vider l'intégralité du contenu interne de Doctrine (qui contient l'auto-référence / récursivité)

Vous pouvez utiliser toArray si vous êtes sûr que l'objet est une instance de Doctrine_Collection. Xdebug n’aide pas les dossiers de doctrine.

La façon dont je suggère d'implémenter une fonction récursive personnalisée pour imprimer un objet, qui utilise Doctrine_Record :: toArray () lorsque cela est nécessaire

function var_dump_improved()
{
   foreach (func_get_args() as $arg) {
       if ($args instanceof Doctrine_Collection) {
          print_r($arg);
       } else if ( $arg instanceof Traversable || is_array($arg) ) {
          // do a foreach and recall var_dump_improved on subelements
       } else if (...) {
          // other types
       } 
   }   
}

Certaines fonctions récursives à déboguer avec un maximum de niveaux d'imbrication sont ici

http://php.net/manual/fr/function.var- dump.php

Regardez les commentaires, recherchez "récursivité"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top