原文: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