Quá nhiều dữ liệu với var_dump trong symfony2 doct2


100

Tôi có khoảng 40 thực thể và nhiều mối quan hệ hai chiều. Bất cứ khi nào tôi sử dụng var_dump ($ user) hoặc bất kỳ thực thể nào, trình duyệt của tôi được tải với quá nhiều dữ liệu về mảng và biến thì nó sẽ bị lỗi.

tôi muốn giải quyết vấn đề gì.

Dữ liệu đang được chèn tốt. Tôi có thể gây ra vấn đề trong sản xuất.


Chúng ta đang nói về trình duyệt nào?
Madara's Ghost

3
Bạn đang sử dụng xdebug? Nếu không, hãy cân nhắc sử dụng nó và thay vì var_dump, chỉ cần sử dụng trình gỡ lỗi bước với IDE như Ecplipse, Netbeans hoặc PHPStorm. Tất cả những thứ này sẽ hiển thị dữ liệu biến một cách độc đáo.
hakre

Ý bạn là gì khi "bị treo" - ứng dụng trình duyệt (hoặc tab) đóng, hoặc nó không hiển thị kết quả, hoặc trang bị gián đoạn?
Yuriy

trình duyệt của tôi hiển thị một trang dữ liệu biến rất dài với tất cả các yêu cầu của tôi và tất cả những thứ đó. có vẻ như nó đi trong vòng lặp không bao giờ kết thúc. tôi đã thử botf firefox và chrome. nếu tôi thử bất kỳ lớp nào khác mà không có mối quan hệ nào thì nó hoạt động tốt nhưng với nhiều mối quan hệ, nó đóng băng máy tính. tôi đã phải nhiệm vụ kết thúc mà
Mirage

Tôi có một lớp đơn giản và trình duyệt của tôi cũng bị lỗi. Tôi ghét tất cả những mặc định chậm phát triển này.
ChocoDeveloper

Câu trả lời:


221

Thay thế var_dump () bằng phương thức gỡ lỗi dump () do Doctrine Common cung cấp .

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

Nó hoạt động cho các đối tượng đơn lẻ và bộ sưu tập Doctrine và sẽ ngăn chặn các vấn đề hiển thị trình duyệt mà bạn đang gặp phải.


5
Bạn cũng có thể dump()với MaxDepth , trong dump()đối số thứ hai là MaxDepth .
MB Kakadiya

3
Nếu bạn muốn có đầu ra gỡ lỗi trong nhật ký lỗi php của mình, hãy sử dụng cách sau: error_log(print_r(\Doctrine\Common\Util\Debug::export($variable, $depth),1)); Việc nhập mỗi lần khá phức tạp, nhưng bạn có thể dễ dàng tạo macro cho nó.
Andrea Sprega

Chức năng này rất hữu ích! Cũng đã cứu tôi khỏi sự cố trình duyệt.
Ren

20

được định dạng tốt:

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


4

Vấn đề là trong mối quan hệ hai chiều, cả hai thực thể đều có liên kết với nhau, vì vậy trong khi hiển thị entity1 var_dump cũng sẽ phải in tất cả các thuộc tính của entity2, bao gồm cả chính entity1 cung cấp cho bạn một vòng lặp.


Đây là câu trả lời duy nhất giải thích TẠI SAO nó xảy ra.
user2342558, 12/09/19

4

Symfony <2,6

Bạn có thể sử dụng \Doctrine\Common\Util\Debug::dump($variable, $depth);nó để hiển thị đầu ra học thuyết mà không cần thông tin proxy.

Symfony> 2,6

Nếu bạn đang sử dụng symfony 2.6 trở lên, tôi khuyên bạn nên sử dụng dump(). Nó hiển thị đầu ra có màu và được định dạng tốt, và bạn có thể mở rộng / ẩn các hàng một cách linh hoạt. nhập mô tả hình ảnh ở đây


2

Get_object_vars () cũng cải thiện khả năng hiển thị.

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

2

Với Symfony 2.6, giờ đây bạn chỉ có thể sử dụng kết xuất ($ var) trong bộ điều khiển của mình và {{dump (var)}} trong twig.

Đảm bảo thêm phần này vào tệp AppKernal.php của bạn, trong phần mảng ('dev', 'test').

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

2

sử dụng kết xuất ($ user) và bạn có thể thấy kết quả hoàn hảo trong Symfony Profiler! chúc may mắn


1

Chỉ cần sử dụng echo serialize ($ user);

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.