CodeIgniter4 調試你的應用

2020-08-17 17:49 更新

取代 var_dump

盡管使用在調試你的應用程序時, XDebug 以及一個優(yōu)秀的 IDE 是不可或缺的,有時候一個簡單的 var_dump() 就是你所需要的。 CodeIgniter 通過集成了優(yōu)秀的 Kint 調試工具來將這一過程更為優(yōu)化。 該功能比你常用的工具更為方便,可以提供多種類型的可選數據,類似于時間戳格式化,以顏色的方式展示十六進制碼,以便于閱讀的方式輸出數組數據等等等。

啟用 Kint

默認情況下,Kint 僅在 development and testing 環(huán)境中啟用(開發(fā)和測試中)。該操作可以通過環(huán)境配置這節(jié)中所述的,修改主 index.php 文件中的 $useKint 值來實現:

  1. $useKint = true;

使用 Kint

d()

d() 方法用于輸出所有其所接受的所有參數,并將其輸出到屏幕上,并允許腳本繼續(xù)執(zhí)行:

  1. d($_SERVER);

dd()

d() 等同,除了該方法同時會執(zhí)行 dies() ,導致該請求的后續(xù)代碼無法執(zhí)行。

trace()

該方法會對于當前執(zhí)行點提供一個調用棧。以 Kint 獨有的方式:

  1. trace();

更多信息請參閱 Kint 主頁.

調試工具條

調試工具條提供了對于當前頁面請求的快照信息,包括性能測試結果,運行的語句,請求和響應數據等。 而這些都在開發(fā)實踐中證明了其在調試和優(yōu)化過程中的實用性。

注解

調試工具條仍處于構建中,并遺留著幾個日后計劃實現的特性功能

啟用工具條

工具條在 除了 生產環(huán)境之外的其他環(huán)境中默認啟用。該功能會在 CI_DEBUG 這個常量被定義且值為正數時顯示。 這一常量在啟用文件(例如 app/Config/Boot/development.php 中)定義,并可被修改并決定該功能用于哪個環(huán)境。

工具條本身作為一個 后置過濾器 所展示。你可以通過將其從app/Config/Filters.php文件的 $globals 屬性中移除的方式來將其停用。

選擇顯示內容

CodeIgniter 中裝載了多個收集器,正如其名所示,用于收集數據并顯示于工具條中。 你可以創(chuàng)建自己的收集器來定制化工具條。為了決定哪些收集器顯示,我們又回到 app/Config/Toolbar.php 這一配置文件:

  1. public $collectors = [
  2. \CodeIgniter\Debug\Toolbar\Collectors\Timers::class,
  3. \CodeIgniter\Debug\Toolbar\Collectors\Database::class,
  4. \CodeIgniter\Debug\Toolbar\Collectors\Logs::class,
  5. \CodeIgniter\Debug\Toolbar\Collectors\Views::class,
  6. \CodeIgniter\Debug\Toolbar\Collectors\Cache::class,
  7. \CodeIgniter\Debug\Toolbar\Collectors\Files::class,
  8. \CodeIgniter\Debug\Toolbar\Collectors\Routes::class,
  9. \CodeIgniter\Debug\Toolbar\Collectors\Events::class,
  10. ];

將你不期望顯示的收集器注釋掉。并通過增加完全命名空間化的類名來增加自定義收集器。 這里給定的收集器將影響哪些區(qū)塊將會顯示,以及哪些信息將會在時間線上呈現

注解

某些區(qū)塊,例如數據庫和日志,將會僅在含有內容時展示。否則將會被移除以節(jié)省顯示空間。

CodeIgniter 裝載的控制器為:

  • Timers 收集性能測試數據,包括系統(tǒng)和應用的
  • Database 展示所有數據庫連接所執(zhí)行的查詢語句與其運行時間
  • Logs 所有日志信息將會在這里展示。在持久運行的系統(tǒng)或者是有許多日志項目的系統(tǒng)中,該功能可能會導致內存問題并需要被禁用。
  • Views 以時間線的方式顯示視圖加載時間,并在獨立區(qū)塊中顯示傳遞給該視圖的所有數據。
  • Cache 將會顯示緩存命中和未命中情況以及執(zhí)行時間
  • Files 顯示在本次請求中加載的所有文件列表
  • Routes 顯示對于當前路由以及系統(tǒng)中定義的所有路由的信息
  • Events 顯示本次請求中所有加載的事件的列表

設置性能測試目標

為了使性能測試器可以收集并展示性能測試數據,你必須使用特定的語法來標記測試點。

請閱讀以下信息以設置性能測試基點 基準測試類

創(chuàng)建自定義收集器

創(chuàng)建自定義收集器是一件簡單直接的事情。你可以創(chuàng)建一個完全命名空間標識的類,并繼承 CodeIgniter\Debug\Toolbar\Collectors\BaseCollector ,從而自動加載器可以將其定位。 該類提供了許多你可以用于重載的方法,并含有四個需要設置的屬性,來幫助你決定如何使用收集器:

  1. <?php namespace MyNamespace;
  2. use CodeIgniter\Debug\Toolbar\Collectors\BaseCollector;
  3. class MyCollector extends BaseCollector
  4. {
  5. protected $hasTimeline = false;
  6. protected $hasTabContent = false;
  7. protected $hasVarData = false;
  8. protected $title = '';
  9. }

$hasTimeline 對于任何想要在工具條的時間線上顯示信息的收集器來說,該屬性應該被設置為 true 。如果該屬性為 true 的話,你需要實現 formatTimelineData() 方法以格式化并返回需要顯示的數據。

$hasTabContent 對于任何想要擁有自定義標簽的收集器來說,該屬性應該被設置為 true 。如果該屬性為 true 的話,你需要提供 $title 值,并實現 display() 方法以渲染標簽頁內容。 如果你需要在標簽標題右側顯示額外的信息的話,需要實現 getTitleDetails() 方法。

$hasVarData 如果該收集器需要為 變量 標簽頁增加額外數據的話,該值應被設為 true 。如果該值為 true ,你需要實現 getVarData() 方法。

$title 在展開的標簽頁上顯示

顯示工具條標簽

為了顯示一個工具條標簽,你必須:

  1. 將需要同時顯示在工具條標題和標簽頭部的文本賦值給 $title .
  2. $hasTabContent 屬性設置為 true.
  3. 實現 display() 方法.
  4. 也可以選擇性地實現 getTitleDetails() 方法.

display() 方法創(chuàng)建了標簽內部顯示的HTML內容。由于標簽的標題會自動交由工具條來處理,因此該方法不會影響它。這一方法會返回一個 HTML 字符串。

getTitleDetails() 方法會返回一個用于顯示在標簽頁標題右側的字符串,該方法可用于更多額外的概覽信息。 例如,在數據庫標簽頁上顯示所有連接所執(zhí)行的查詢數,以及在文件標簽頁上顯示打開的文件總個數等。

提供時間線數據

為了提供在時間線上展示的數據,你必須:

  1. $hasTimeline 變量設為 true.
  2. 實現 formatTimelineData() 方法.

formatTimelineData() 方法必須返回一個以時間線可用的格式的數組,其中以正確的方式排序并返回正確的信息。內層數據必須包含以下信息:

  1. $data[] = [
  2. 'name' => '', // 在時間線左側顯示的名字
  3. 'component' => '', // 在時間線中間列出的部件名
  4. 'start' => 0.00, // 開始時間,例如 microtime(true)
  5. 'duration' => 0.00 // 持續(xù)時間,例如 mircrotime(true) - microtime(true)
  6. ];

提供變量

為了將數據加入到變量標簽頁中,你必須:

  1. $hasVarData 變量設為 true
  2. 實現 getVarData() 方法。

getVarData() 方法應當返回一個需要顯示的以鍵值對格式的數組 外層數組的鍵為變量標簽頁的標簽名:

  1. $data = [
  2. 'section 1' => [
  3. 'foo' => 'bar',
  4. 'bar' => 'baz'
  5. ],
  6. 'section 2' => [
  7. 'foo' => 'bar',
  8. 'bar' => 'baz'
  9. ]
  10. ];
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號