原文:http://www.daydaytc.com/php/305.html
php
原本覺得onethink是在tp的基礎上開發的,那麼tp的文檔應該適用於onethink,可是卻偏偏相反。今天想使用如下tp的頁面trace功能調試如下onethink,結果按照tp文檔上所說,先開啓debug調試,而後在項目配置文件中開啓 ‘SHOW_PAGE_TRACE’ =>true,最後就能夠了。結果弄來弄去沒有看到頁面trace的身影。
通過一步步調試也終於明白了。其實onethink在tp的基礎上有點小改動。咱們先來了解一下頁面trace是怎麼實現的。tp經過行爲擴展實現了頁面trace。在行爲模式common.php中定義了html
'app_end' => array(
'Behavior\ShowPageTraceBehavior', // 頁面Trace顯示
),ajax
系統在初始化的時候會把此行爲擴展加載到hook中,在app的run方法中調用了app_end標籤,執行了ShowPageTraceBehavior類的run方法。數據庫
來看run方法幹了什麼..
判斷一下若是不是ajax請求而且 SHOW_PAGE_TRACE爲true,那麼就調用其trace方法組合出調試信息並echo。app
// 行爲擴展的執行入口必須是run
public function run(&$params)
{
if (!IS_AJAX && !IS_CLI && C('SHOW_PAGE_TRACE')) {
echo $this->showTrace();
}
}ide
原本很是順暢的一段,可是問題就是出在這個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();this
意思就是讀取數據庫中的配置,合併到C函數的配置中。這樣咱們在之後使用c函數的時候看到的就是合併後的了。
這就是爲何咱們明明設置了SHOW_PAGE_TRACE爲true,但仍是爲false。由於數據庫中是false,最後合併吧前面的值給覆蓋了。因此咱們要想使用頁面trace的功能,須要在ot的後臺進行設置。debug