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?

Foi útil?

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"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top