2008-10-19 20 views
8

Çok tuhaf bir sorunum var, var_dump (veya print_r) bir Doktrin Nesnesini denediğimde, Apache'm boş bir boş sayfa (200 OK başlığı) ile yanıt veriyor. Ben var_dumpNeden bir Doktrini Nesnesi var_dump Apache'mi öldürür?

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

var_dump ve var_dumpvar_dumpvar_dumpvar_dumpvar_dump xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzxx xzxx Fakat herhangi bir Doktrini sınıfından herhangi bir nesne ile ($connection->query()'ten bir sonuç gibi, ya da Doktrini ile nesne modelimin bir sınıfının bir örneği gibi) yapamıyorum.

Bunun neden olduğunu bilen var mı?

+4

aramaya p". Doğru çözümü (http://stackoverflow.com/a/8646048/3408) "bellek sınırını artırma" dan değil, problemi çözmeyecek şekilde kabul edebilirsiniz. – rjmunro

cevap

1

Bazen kendim referans veren bir nesne olan print_r()'a başvururken bunu yaşadım - bir döngüye giriyor ve bellek bitti. Muhtemelen bu sana oluyor.

bellek sınırı ( ini_set('memory_limit', '256M');) artırmayı deneyin ve bu kadar çözülüp çözülmediğini görmek.

Düzenleme: Bunun için gerçek bir düzeltme olduğunu sanmıyorum - bu, özyineleme derinliğini sınırlamayan PHP'nin var_dump/print_r içeriğidir (veya en azından düzgün şekilde yapmayın). Eğer XDebug uzantı yüklerseniz, bu yerleşik var_dump çok daha iyi Özyinelemeyi işleyen bir sürümü ile değiştirebilirsiniz.

+11

yararlı çıktı almazsınız, bu nedenle, daha iyi bir yanıt – Gigala

+2

açıklanan açıklanır doctrine dökümü \ Doctrine \ Common \ Util \ Debug :: döküm() daha iyi bir yanıt olarak kabul edilmemelidir. Chmod 777'yi tavsiye etmek gibi. – renoirb

8

Doctrine_Record sınıfının toArray yöntemi kullanma

var_dump($doctrine_record->toArray()); 

sadece DB alanları görüntülemek ve

49

Tembel yük vekiller her içerir (btw kendi referans/Özyinelemeyi içerir) tam doktrini iç bölümü damping önlemek Doktrin EntityManager'ın bir örneği ve tüm bağımlılıkları. Bu nedenle, bir var_dump sayılı belge, muhtemelen, oluşturulması ve okunması imkansız olan, çok büyük bir özyineleme yapısını boşaltacaktır. Bir insan okunabilir seviyeye damping kısıtlamak için \Doctrine\Common\Util\Debug::dump() kullanmak zorunda. Bu işlev için varsayılan derinliğin 2'ye ayarlandığını unutmayın (bu ikinci parametre)

+0

Bu bahşiş için çok teşekkürler! – Besnik

+0

Bellek sınırını artırmanın yanı sıra, bu noktadan kurtulmanın bir yolu, [xdebug] (http://xdebug.org/) kullanmak ve sadece xdebug.var_display_max_depth' işlevinden yararlanmak ve yalnızca belirli bir derinliğe dökmek olacaktır. Bu özyineleme. – ficuscr

+0

başka yoludur –

0

Nesnenin Doctrine_Collection örneğinin olduğundan eminseniz toArray öğesini kullanabilirsiniz. Xdebug, doktrin kayıtlarında yardımcı olmaz.

max yuvalama seviyeleri ile hata ayıklama

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 
     } 
    } 
} 

Bazı özyinelemeli fonksiyon neeeded zaman Doctrine_Record :: ToArray() kullanın ben nesneyi yazdırmak için özel bir özyinelemeli işlevi uyguluyor önermek yolu, burada

vardır yorumlarına http://php.net/manual/en/function.var-dump.php

bak, "özyineleme" Bu "doktrin var_dum numaralı google sonucudur

İlgili konular