Por var_dump uma doutrina Objects matar meu Apache?
Pergunta
Eu tenho um problema muito estranho, quando eu tento var_dump
(ou print_r
) um objeto Doctrine, minhas respostas Apache com uma página em branco vazio (200 OK cabeçalho). Posso var_dump
um php var normal como:
$dummy = array("a" => 1, "b" =>2);
E ele funciona muito bem. Mas eu não posso com qualquer objeto de qualquer classe Doctrine, (como um resultado da $connection->query()
, ou uma instância de uma classe do meu modelo de objeto com Doutrina).
Alguém sabe por que isso acontece?
Solução
Eu tive que às vezes ao tentar print_r()
um objeto de auto-referência - ele entra em um loop e ficar sem memória. Possivelmente isso é o que está acontecendo com você.
Tente aumentar o limite de memória (ini_set('memory_limit', '256M');
) e ver se isso resolve o problema.
Edit: Eu não acho que há uma correção real para isso - é interna var_dump
/ print_r
do PHP que não o fazem profundidade limite de recursão (ou não fazê-lo corretamente, pelo menos). Se você instalar o href="http://xdebug.org/" rel="nofollow noreferrer"> XDebug extensão var_dump com uma versão que alças recursão muito melhor.
Outras dicas
proxies carga lenta sempre conter uma instância de EntityManager de Doutrina e todas as suas dependências.
Portanto, um var_dump
possivelmente irá despejar uma grande estrutura recursiva que é impossível processar e ler. Você tem que usar \Doctrine\Common\Util\Debug::dump()
para restringir o despejo para um nível legível. Note-se que a profundidade padrão para esta função está definida para 2 (é o segundo parâmetro)
Use o método toArray
da classe Doctrine_Record
var_dump($doctrine_record->toArray());
só vai exibir os campos de banco de dados e evitar o dumping os internos Doutrina completos (que contém auto referência / recursão btw)
Você pode usar toArray se você tem certeza que o objeto é uma instância de Doctrine_Collection. Xdebug não ajuda com registros doutrina.
A maneira que eu sugiro é a implementação de uma função recursiva personalizado para imprimir objeto, que o uso Doctrine_Record :: toArray () quando neeeded
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
}
}
}
Alguns função recursiva para depuração com níveis de aninhamento máximo aqui
http://php.net/manual/en/function.var- dump.php
Olhe para os comentários, olhar para "recursão"