原文:http://www.daydaytc.com/php/305.html
本來以爲onethink是在tp的基礎上開發的,那麼tp的文檔應該適用於onethink,但是卻恰恰相反。今天想使用以下tp的頁面trace功能調試以下onethink,結果按照tp文檔上所說,先開啓debug調試,然後在項目配置文件中開啓 ‘SHOW_PAGE_TRACE’ =>true,最後就可以了。結果弄來弄去沒有看到頁面trace的身影。
經過一步步調試也終於明白了。其實onethink在tp的基礎上有點小改動。我們先來了解一下頁面trace是怎麼實現的。tp通過行爲擴展實現了頁面trace。在行爲模式common.php中定義了
'app_end' => array(
'Behavior\ShowPageTraceBehavior', // 頁面Trace顯示
),
系統在初始化的時候會把此行爲擴展加載到hook中,在app的run方法中調用了app_end標籤,執行了ShowPageTraceBehavior類的run方法。
來看run方法幹了什麼..
判斷一下如果不是ajax請求並且 SHOW_PAGE_TRACE爲true,那麼就調用其trace方法組合出調試信息並echo。
// 行爲擴展的執行入口必須是run
public function run(&$params)
{
if (!IS_AJAX && !IS_CLI && C('SHOW_PAGE_TRACE')) {
echo $this->showTrace();
}
}
本來非常順暢的一段,但是問題就是出在這個C(‘SHOW_PAGE_TRACE’). 經過調試後發現此時這個值竟是個0,也即是沒有開啓。但是我確實在配置文件中開啓了爲true。
這裏就是onethink的改變。onethink在其後臺有個配置系統,可以可視化的對配置進行修改。ot在其後臺的公用控制器AdminController和前臺的HomeController的初始化方法中都加入以下邏輯。
/* 讀取數據庫中的配置 */
$config = S('DB_CONFIG_DATA');
if(!$config){
$config = D('Config')->lists();
S('DB_CONFIG_DATA',$config);
}
C($config); //添加配置
$this->display();
意思就是讀取數據庫中的配置,合併到C函數的配置中。這樣我們在以後使用c函數的時候看到的就是合併後的了。
這就是爲什麼我們明明設置了SHOW_PAGE_TRACE爲true,但還是爲false。因爲數據庫中是false,最後合併吧前面的值給覆蓋了。所以我們要想使用頁面trace的功能,需要在ot的後臺進行設置。