มีข้อมูลมากเกินไปกับ var_dump ใน symfony2 doctrine2


100

ฉันมีเอนทิตีประมาณ 40 รายการและมีความสัมพันธ์แบบสองทิศทางมากมาย เมื่อใดก็ตามที่ฉันใช้ var_dump ($ user) หรือเอนทิตีใด ๆ ที่เบราว์เซอร์ของฉันโหลดด้วยข้อมูลอาร์เรย์และตัวแปรมากเกินไปมันก็จะพัง

ฉันต้องการปัญหาอะไร

กำลังแทรกข้อมูลได้ดี ฉันสามารถทำให้เกิดปัญหาในการผลิตได้หรือไม่


เรากำลังพูดถึงเบราว์เซอร์อะไร
Madara's Ghost

3
คุณใช้ xdebug หรือไม่? ถ้าไม่ลองใช้มันแทน var_dump ให้ใช้ step debugger ที่มี IDE เช่น Ecplipse, Netbeans หรือ PHPStorm แทน ทั้งหมดนี้จะแสดงข้อมูลตัวแปรอย่างสวยงาม
hakre

คุณหมายถึงอะไรคำว่า "หยุดทำงาน" - แอปพลิเคชันเบราว์เซอร์ (หรือแท็บ) ปิดหรือไม่แสดงผลลัพธ์หรือหน้าหยุดชะงัก?
Yuriy

เบราว์เซอร์ของฉันแสดงหน้าข้อมูลตัวแปรที่ยาวมากพร้อมเอนทิตี้ทั้งหมดของฉันและทั้งหมดนั้น ดูเหมือนว่ามันจะวนซ้ำไม่สิ้นสุด ฉันลอง botf firefox และ chrome ถ้าฉันลองคลาสอื่นที่ไม่มีความสัมพันธ์มันก็ใช้ได้ แต่ด้วยความสัมพันธ์มากมายมันทำให้คอมพิวเตอร์หยุดทำงาน ฉันต้องยุติภารกิจนั้น
มิราจ

ฉันมีคลาส bare-bone และเบราว์เซอร์ของฉันก็พังเช่นกัน ฉันเกลียดค่าเริ่มต้นที่ปัญญาอ่อนเหล่านี้
ChocoDeveloper

คำตอบ:


221

แทนที่var_dump ()กับวิธีการแก้ปัญหาการถ่ายโอนข้อมูล ()ให้โดยหลักคำสอนทั่วไป

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

ใช้งานได้กับวัตถุเดี่ยวและคอลเลกชันหลักคำสอนและควรป้องกันไม่ให้เบราว์เซอร์แสดงปัญหาที่คุณมี


5
คุณยังสามารถdump()มีmaxdepthในdump()อาร์กิวเมนต์ที่สองคือmaxdepth
MB Kakadiya

3
หากคุณต้องการให้เอาต์พุตดีบักในบันทึกข้อผิดพลาด php ของคุณให้ใช้สิ่งต่อไปนี้: error_log(print_r(\Doctrine\Common\Util\Debug::export($variable, $depth),1)); การพิมพ์ทุกครั้งค่อนข้างยุ่งยาก แต่คุณสามารถสร้างมาโครได้อย่างง่ายดาย
Andrea Sprega

ฟังก์ชั่นนี้มีประโยชน์มาก! ช่วยฉันจากเบราว์เซอร์ล่มเช่นกัน
Ren



4

ปัญหาคือในความสัมพันธ์แบบสองทิศทางทั้งสองเอนทิตีมีลิงก์ซึ่งกันและกันดังนั้นในขณะที่แสดงเอนทิตี 1 var_dump จะต้องพิมพ์คุณสมบัติทั้งหมดของเอนทิตี 2 ด้วยซึ่งรวมเอนทิตี 1 เองเพื่อให้คุณวนซ้ำ


นี่เป็นคำตอบเดียวที่อธิบายว่าทำไมจึงเกิดขึ้น
user2342558

4

Symfony <2.6.2

คุณสามารถใช้\Doctrine\Common\Util\Debug::dump($variable, $depth);มันแสดงผลลัพธ์หลักคำสอนโดยไม่ต้องใช้ข้อมูลพร็อกซี

Symfony> 2.6

หากคุณกำลังใช้ symfony 2.6 dump()หรือมากกว่าผมขอแนะนำให้คุณใช้ แสดงเอาต์พุตที่มีรูปแบบและสีที่ดีและคุณสามารถใช้ / ซ่อนแถวแบบไดนามิกได้ ป้อนคำอธิบายภาพที่นี่



2

ด้วย Symfony 2.6 ตอนนี้คุณสามารถใช้การถ่ายโอนข้อมูล ($ var) ในตัวควบคุมของคุณและ {{dump (var)}} ใน twig ได้

อย่าลืมเพิ่มสิ่งนี้ลงในไฟล์ AppKernal.php ของคุณในส่วนอาร์เรย์ ('dev', 'test')

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

2

ใช้การถ่ายโอนข้อมูล (ผู้ใช้ $) และคุณสามารถเห็นผลลัพธ์ที่สมบูรณ์แบบใน Symfony Profiler! โชคดี


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.