調(diào)試你的應(yīng)用?
取代 var_dump?
盡管使用在調(diào)試你的應(yīng)用程序時, XDebug 以及一個優(yōu)秀的 IDE 是不可或缺的,有時候一個簡單的 var_dump()
就是你所需要的。
CodeIgniter 通過集成了優(yōu)秀的 Kint 調(diào)試工具來將這一過程更為優(yōu)化。
該功能比你常用的工具更為方便,可以提供多種類型的可選數(shù)據(jù),類似于時間戳格式化,以顏色的方式展示十六進(jìn)制碼,以便于閱讀的方式輸出數(shù)組數(shù)據(jù)等等等。
調(diào)試工具條?
調(diào)試工具條提供了對于當(dāng)前頁面請求的快照信息,包括性能測試結(jié)果,運行的語句,請求和響應(yīng)數(shù)據(jù)等。 而這些都在開發(fā)實踐中證明了其在調(diào)試和優(yōu)化過程中的實用性。
注解
調(diào)試工具條仍處于構(gòu)建中,并遺留著幾個日后計劃實現(xiàn)的特性功能
啟用工具條?
工具條在 除了 生產(chǎn)環(huán)境之外的其他環(huán)境中默認(rèn)啟用。該功能會在 CI_DEBUG 這個常量被定義且值為正數(shù)時顯示。
這一常量在啟用文件(例如 app/Config/Boot/development.php
中)定義,并可被修改并決定該功能用于哪個環(huán)境。
工具條本身作為一個 后置過濾器 所展示。你可以通過將其從**app/Config/Filters.php**文件的 $globals
屬性中移除的方式來將其停用。
選擇顯示內(nèi)容?
CodeIgniter 中裝載了多個收集器,正如其名所示,用于收集數(shù)據(jù)并顯示于工具條中。 你可以創(chuàng)建自己的收集器來定制化工具條。為了決定哪些收集器顯示,我們又回到 app/Config/Toolbar.php 這一配置文件:
public $collectors = [
\CodeIgniter\Debug\Toolbar\Collectors\Timers::class,
\CodeIgniter\Debug\Toolbar\Collectors\Database::class,
\CodeIgniter\Debug\Toolbar\Collectors\Logs::class,
\CodeIgniter\Debug\Toolbar\Collectors\Views::class,
\CodeIgniter\Debug\Toolbar\Collectors\Cache::class,
\CodeIgniter\Debug\Toolbar\Collectors\Files::class,
\CodeIgniter\Debug\Toolbar\Collectors\Routes::class,
\CodeIgniter\Debug\Toolbar\Collectors\Events::class,
];
將你不期望顯示的收集器注釋掉。并通過增加完全命名空間化的類名來增加自定義收集器。 這里給定的收集器將影響哪些區(qū)塊將會顯示,以及哪些信息將會在時間線上呈現(xiàn)
注解
某些區(qū)塊,例如數(shù)據(jù)庫和日志,將會僅在含有內(nèi)容時展示。否則將會被移除以節(jié)省顯示空間。
CodeIgniter 裝載的控制器為:
- Timers 收集性能測試數(shù)據(jù),包括系統(tǒng)和應(yīng)用的
- Database 展示所有數(shù)據(jù)庫連接所執(zhí)行的查詢語句與其運行時間
- Logs 所有日志信息將會在這里展示。在持久運行的系統(tǒng)或者是有許多日志項目的系統(tǒng)中,該功能可能會導(dǎo)致內(nèi)存問題并需要被禁用。
- Views 以時間線的方式顯示視圖加載時間,并在獨立區(qū)塊中顯示傳遞給該視圖的所有數(shù)據(jù)。
- Cache 將會顯示緩存命中和未命中情況以及執(zhí)行時間
- Files 顯示在本次請求中加載的所有文件列表
- Routes 顯示對于當(dāng)前路由以及系統(tǒng)中定義的所有路由的信息
- Events 顯示本次請求中所有加載的事件的列表
設(shè)置性能測試目標(biāo)?
為了使性能測試器可以收集并展示性能測試數(shù)據(jù),你必須使用特定的語法來標(biāo)記測試點。
請閱讀以下信息以設(shè)置性能測試基點 基準(zhǔn)測試類
創(chuàng)建自定義收集器?
創(chuàng)建自定義收集器是一件簡單直接的事情。你可以創(chuàng)建一個完全命名空間標(biāo)識的類,并繼承 CodeIgniter\Debug\Toolbar\Collectors\BaseCollector
,從而自動加載器可以將其定位。
該類提供了許多你可以用于重載的方法,并含有四個需要設(shè)置的屬性,來幫助你決定如何使用收集器:
<?php namespace MyNamespace;
use CodeIgniter\Debug\Toolbar\Collectors\BaseCollector;
class MyCollector extends BaseCollector
{
protected $hasTimeline = false;
protected $hasTabContent = false;
protected $hasVarData = false;
protected $title = '';
}
$hasTimeline 對于任何想要在工具條的時間線上顯示信息的收集器來說,該屬性應(yīng)該被設(shè)置為 true
。如果該屬性為 true 的話,你需要實現(xiàn) formatTimelineData()
方法以格式化并返回需要顯示的數(shù)據(jù)。
$hasTabContent 對于任何想要擁有自定義標(biāo)簽的收集器來說,該屬性應(yīng)該被設(shè)置為 true
。如果該屬性為 true 的話,你需要提供 $title
值,并實現(xiàn) display()
方法以渲染標(biāo)簽頁內(nèi)容。
如果你需要在標(biāo)簽標(biāo)題右側(cè)顯示額外的信息的話,需要實現(xiàn) getTitleDetails()
方法。
$hasVarData 如果該收集器需要為 變量
標(biāo)簽頁增加額外數(shù)據(jù)的話,該值應(yīng)被設(shè)為 true
。如果該值為 true ,你需要實現(xiàn) getVarData()
方法。
$title 在展開的標(biāo)簽頁上顯示
顯示工具條標(biāo)簽?
為了顯示一個工具條標(biāo)簽,你必須:
- 將需要同時顯示在工具條標(biāo)題和標(biāo)簽頭部的文本賦值給
$title
. - 將
$hasTabContent
屬性設(shè)置為true
. - 實現(xiàn)
display()
方法. - 也可以選擇性地實現(xiàn)
getTitleDetails()
方法.
display()
方法創(chuàng)建了標(biāo)簽內(nèi)部顯示的HTML內(nèi)容。由于標(biāo)簽的標(biāo)題會自動交由工具條來處理,因此該方法不會影響它。這一方法會返回一個 HTML 字符串。
getTitleDetails()
方法會返回一個用于顯示在標(biāo)簽頁標(biāo)題右側(cè)的字符串,該方法可用于更多額外的概覽信息。
例如,在數(shù)據(jù)庫標(biāo)簽頁上顯示所有連接所執(zhí)行的查詢數(shù),以及在文件標(biāo)簽頁上顯示打開的文件總個數(shù)等。
提供時間線數(shù)據(jù)?
為了提供在時間線上展示的數(shù)據(jù),你必須:
- 將
$hasTimeline
變量設(shè)為true
. - 實現(xiàn)
formatTimelineData()
方法.
formatTimelineData()
方法必須返回一個以時間線可用的格式的數(shù)組,其中以正確的方式排序并返回正確的信息。內(nèi)層數(shù)據(jù)必須包含以下信息:
$data[] = [
'name' => '', // 在時間線左側(cè)顯示的名字
'component' => '', // 在時間線中間列出的部件名
'start' => 0.00, // 開始時間,例如 microtime(true)
'duration' => 0.00 // 持續(xù)時間,例如 mircrotime(true) - microtime(true)
];
提供變量?
為了將數(shù)據(jù)加入到變量標(biāo)簽頁中,你必須:
- 將
$hasVarData
變量設(shè)為true
- 實現(xiàn)
getVarData()
方法。
getVarData()
方法應(yīng)當(dāng)返回一個需要顯示的以鍵值對格式的數(shù)組
外層數(shù)組的鍵為變量標(biāo)簽頁的標(biāo)簽名:
$data = [
'section 1' => [
'foo' => 'bar',
'bar' => 'baz'
],
'section 2' => [
'foo' => 'bar',
'bar' => 'baz'
]
];