Troppi dati con var_dump in symfony2 doctrine2


100

Ho circa 40 entità e molte relazioni bidirezionali. Ogni volta che uso var_dump ($ user) o qualsiasi entità il mio browser viene caricato con troppi dati di array e variabili, si è semplicemente bloccato.

Voglio qual è il problema.

I dati vengono inseriti correttamente. Posso causare problemi in produzione.


Di quale browser stiamo parlando?
Il fantasma di Madara il

3
Stai usando xdebug? In caso contrario, considera di usarlo e invece di var_dump usa semplicemente il debugger passo con un IDE come Ecplipse, Netbeans o PHPStorm. Tutti questi mostreranno bene i dati delle variabili.
hakre

Cosa intendi per "arresto anomalo": l'applicazione del browser (o la scheda) si chiude o non visualizza alcun risultato o la pagina viene interrotta?
Yuriy

il mio browser mostra una pagina molto lunga di dati delle variabili con tutte le mie entità e tutto il resto. sembra che vada in loop senza fine. ho provato botf firefox e chrome. se provo qualsiasi altra classe che non ha relazioni, funziona bene ma con molte relazioni blocca il computer. ho dovuto terminare il compito che
Mirage

Ho una lezione essenziale e anche il mio browser si è bloccato. Odio tutte queste impostazioni ritardate.
ChocoDeveloper

Risposte:


221

Sostituisci var_dump () con il metodo di debug dump () fornito da Doctrine Common .

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

Funziona per singoli oggetti e raccolte di Doctrine e dovrebbe impedire al browser di visualizzare i problemi che stai riscontrando.


5
Puoi anche dump()con MaxDepth , nel dump()secondo argomento è MaxDepth .
MB Kakadiya

3
Se preferisci avere l'output di debug nel tuo log degli errori php, usa quanto segue: error_log(print_r(\Doctrine\Common\Util\Debug::export($variable, $depth),1)); È piuttosto complicato da digitare ogni volta, ma puoi facilmente creare una macro per esso.
Andrea Sprega

Questa funzione è molto utile! Mi ha salvato anche dai crash del browser.
Ren

20

ben formattato:

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


4

Il problema è che in una relazione bidirezionale entrambe le entità hanno un collegamento tra loro, quindi durante la visualizzazione di entity1 var_dump dovrà anche stampare tutte le proprietà di entity2, che includono entity1 stessa dandoti un ciclo.


Questa è l'unica risposta che spiega il PERCHÉ accade.
user2342558

4

Symfony <2.6

Puoi usarlo \Doctrine\Common\Util\Debug::dump($variable, $depth);per visualizzare l'output di doctrine senza le informazioni sul proxy.

Symfony> 2.6

Se stai usando symfony 2.6 o più, ti consiglio caldamente di usarlo dump(). Mostra un output ben formattato e colorato e puoi spendere / nascondere dinamicamente le righe. inserisci qui la descrizione dell'immagine


2

Anche get_object_vars () migliora la visualizzazione.

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

2

Con Symfony 2.6 ora puoi semplicemente usare dump ($ var) nel tuo controller e {{dump (var)}} in twig.

Assicurati di aggiungerlo al tuo file AppKernal.php, nella sezione array ('dev', 'test').

$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();

2

usa dump ($ user) e puoi vedere risultati perfetti in Symfony Profiler! in bocca al lupo


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.