Muitos dados com var_dump no symfony2 doctrine2


100

Tenho cerca de 40 entidades e muitos relacionamentos bidirecionais. Sempre que eu uso var_dump ($ user) ou qualquer entidade, meu navegador é carregado com muitos dados de arrays e variáveis, então ele simplesmente travava.

eu quero qual é o problema.

Os dados estão sendo inseridos corretamente. Posso causar problemas na produção.


De que navegador estamos falando?
Madara's Ghost

3
Você está usando o xdebug? Caso contrário, considere usá-lo e, em vez de var_dump, apenas use o depurador de etapas com um IDE como Ecplipse, Netbeans ou PHPStorm. Todos eles exibirão os dados das variáveis ​​de maneira adequada.
hakre de

O que você quer dizer com "travamento" - o aplicativo do navegador (ou guia) fecha, não exibe nenhum resultado ou a página é interrompida?
Yuriy

meu navegador exibe uma página muito longa de dados variáveis ​​com todas as minhas entidades e tudo mais. parece que vai em um loop sem fim. Eu tentei botf firefox e cromo. se eu tentar qualquer outra classe que não tenha relação, então funciona bem, mas com muitos relacionamentos ele congela o computador. eu tive que terminar a tarefa que
Mirage de

Tenho uma aula básica e meu navegador também travou. Estou odiando todos esses padrões retardados.
ChocoDeveloper 01 de

Respostas:


221

Substitua var_dump () pelo método de depuração dump () fornecido pelo Doctrine Common .

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

Ele funciona para objetos únicos e coleções do Doctrine e deve evitar que o navegador exiba os problemas que você está tendo.


5
Você pode também dump()com MaxDepth , em dump()segundo argumento é MaxDepth .
MB Kakadiya

3
Se você preferir ter a saída de depuração em seu log de erros php, use o seguinte: error_log(print_r(\Doctrine\Common\Util\Debug::export($variable, $depth),1)); É muito complicado digitar todas as vezes, mas você pode facilmente criar uma macro para ele.
Andrea Sprega

Esta função é muito útil! Me salvou de travamentos do navegador também.
Ren

20

bem formatado:

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


4

O problema é que em um relacionamento bidirecional ambas as entidades têm um link entre si, portanto, enquanto exibe a entidade1, o var_dump também terá que imprimir todas as propriedades da entidade2, que incluem a própria entidade1, fornecendo um loop.


Esta é a única resposta que explica o PORQUE isso acontece.
user2342558

4

Symfony <2.6

Você pode usá- \Doctrine\Common\Util\Debug::dump($variable, $depth);lo para exibir a saída da doutrina sem as informações do proxy.

Symfony> 2.6

Se você estiver usando o symfony 2.6 ou mais, recomendo fortemente que você use dump(). Ele mostra uma saída bem formatada e colorida, e você pode expandir / ocultar linhas dinamicamente. insira a descrição da imagem aqui


2

O get_object_vars () melhora a visualização também.

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

2

Com o Symfony 2.6 agora você pode apenas usar dump ($ var) em seu controlador e {{dump (var)}} no twig.

Certifique-se de adicionar isso ao seu arquivo AppKernal.php, na seção array ('dev', 'test').

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

2

use dump ($ user) e você poderá ver o resultado perfeito no Symfony Profiler! boa sorte


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.