Cách sử dụng các hàm gỡ lỗi Devel trên các đối tượng lớn hoặc phức tạp


7

Tôi gặp sự cố khi sử dụng thực sự các chức năng gỡ lỗi của Devel kint()dpm()trong các mô-đun và mẫu twig của tôi. Chúng hoạt động tốt đối với các biến nguyên thủy, mảng phẳng và như vậy, nhưng nếu tôi muốn kiểm tra một số đối tượng như EntityRerefenceFieldItemListchúng sẽ khiến trang web bị sập (trang trắng) hoặc tạo ra quá nhiều dữ liệu để các tập lệnh mở rộng danh sách không còn hoạt động .

Làm thế nào để tôi tránh được những vấn đề này?

Câu trả lời:


8

Khi làm việc với các thực thể và các trường, bạn muốn xem các giá trị , không phải các đối tượng.

Đối với một thực thể, sử dụng $entity->toArray(), cho một đối tượng trường, sử dụng $field->getValue(). Bạn có thể chuyển đổi gần như 1: 1 để truy cập các giá trị đó trên một đối tượng, ví dụ: $ entity-> field_name-> property.

Một vài thứ không được hiển thị ở đó, ví dụ các thuộc tính được tính như -> thực thể trên trường tham chiếu thực thể. Xem https://wizzlern.nl/drupal/drupal-8-entity-cheat-sheet để biết giới thiệu tổng thể.

Điều đó nói rằng, tôi cũng rất khuyến nghị IDE + xdebug trên bất kỳ hàm gỡ lỗi nào, tôi chỉ sử dụng điều đó và đôi khi là một gỡ lỗi đơn giản (), hoạt động tốt trên các mảng giá trị được trả về bởi các phương thức được đề cập ở trên.


9

Vấn đề đầu tiên có thể tạm thời được khắc phục bằng cách thay đổi mức mảng / đối tượng tối đa Kint sẽ đi sâu. Hiện tại điều này vẫn phải được thực hiện bằng cách thay đổi một dòng mã trong mô-đun. Mặc dù đã có một vấn đề https://www.drupal.org/node/2405179 để biến điều này thành một cài đặt có thể định cấu hình.

Trong devel/kint/kint/config.default.phpsự thay đổi 7đến bất kỳ số lượng bạn cũng tốt với. Tôi thường đặt nó thành 4.

/** @var int max array/object levels to go deep, if zero no limits are applied */
$_kintSettings['maxLevels'] = 7;

Hãy nhớ rằng số này sẽ được đặt lại ngay khi bạn cập nhật mô-đun Devel.


Cập nhật: Bây giờ tôi thấy đoạn trích đẹp này chỉ đơn giản được đặt trong cài đặt của bạn (.local) .php. Không có hack hoặc các bản vá cần thiết.

// Change kint maxLevels setting:
include_once(DRUPAL_ROOT . '/modules/contrib/devel/kint/kint/Kint.class.php');
if (class_exists('Kint')) {
  // Set the maxlevels to prevent out-of-memory.
  Kint::$maxLevels = 4;
}

4

Mô-đun Devel là một công cụ tuyệt vời, tuy nhiên nó không hoạt động cho mọi tình huống. Thực sự có một mô-đun để gỡ lỗi twig được gọi là Twig XDebug (mà tôi chưa thực hiện).

Hoặc là

Nhận xdebuger được cài đặt thủ công với IDE của bạn.

IDE tự do có sẵn:

  • Netbeans

  • Nhật thực

  • Aptana Studio (đạo hàm Eclipse)

IDE trả phí:

  • Thiết kế phpD

  • Jetbrains PHPStorm

  • Komodo IDE (có một số kịch bản giá miễn phí / linh hoạt).

Các bước tiếp theo sẽ được thực hiện sau khi chọn IDE.

  1. Cài đặt Xdebug

  2. Sửa đổi cấu hình php.ini của bạn để kích hoạt xdebug

  3. Cài đặt IDE của bạn, định cấu hình để sử dụng xdebug và trình duyệt.

  4. Có thể là một plugin trình duyệt cho xdebug. Trình trợ giúp Ex- Xdebug cho Chrome


Đối với phần đầu tiên: hiện tại cũng phát triển cung cấp tích hợp XDebug cho các mẫu Twig với chức năng {{ devel_breakpoint() }}. xem tại đây
marco

4

Hãy cẩn thận với những cú click chuột, đừng nhấp vào +biểu tượng! Điều này mở rộng tất cả các cấp độ, có thể mất một thời gian dài. Nếu bạn nhấp vào thanh tiêu đề, bạn chỉ mở rộng cấp cao nhất.

Gỡ lỗi Drupal 8: Kareful Klicking in Kint


Tôi nghĩ rằng đó không phải là việc nhấp vào dấu '+' ở hầu hết góc bên trái của kint mà thực sự là casee khi kích thước của đối tượng quá nặng đến nỗi nó phá vỡ trang ở giữa quá trình kết xuất và nó có một trang trắng trống.
Ashish Deynap

Đây là phần cuối cùng của câu hỏi: "... hoặc tạo ra rất nhiều dữ liệu sao cho các tập lệnh để mở rộng danh sách không còn hoạt động." - Phần còn lại được bao phủ hoàn hảo bởi các câu trả lời khác.
4k4
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.