原文:http://www.daydaytc.com/php/305.html@H_404_1@
@H_404_1@
本来以为onethink是在tp的基础上开发的,那么tp的文档应该适用于onethink,但是却恰恰相反。今天想使用以下tp的页面trace功能调试以下onethink,结果按照tp文档上所说,先开启debug调试,然后在项目配置文件中开启 ‘SHOW_PAGE_TRACE’ =>true,最后就可以了。结果弄来弄去没有看到页面trace的身影。@H_404_1@@H_404_1@经过一步步调试也终于明白了。其实onethink在tp的基础上有点小改动。我们先来了解一下页面trace是怎么实现的。tp通过行为扩展实现了页面trace。在行为模式common.PHP中定义了
'app_end' => array(@H_404_1@ 'Behavior\ShowPageTraceBehavior',// 页面Trace显示@H_404_1@),
@H_404_1@
系统在初始化的时候会把此行为扩展加载到hook中,在app的run方法中调用了app_end标签,执行了ShowPageTraceBehavior类的run方法。
@H_404_1@
来看run方法干了什么..@H_404_1@@H_404_1@判断一下如果不是ajax请求并且 SHOW_PAGE_TRACE为true,那么就调用其trace方法组合出调试信息并echo。
// 行为扩展的执行入口必须是run@H_404_1@public function run(&$params)@H_404_1@{@H_404_1@ if (!IS_AJAX && !IS_CLI && C('SHOW_PAGE_TRACE')) {@H_404_1@ echo $this->showTrace();@H_404_1@ }@H_404_1@}
本来非常顺畅的一段,但是问题就是出在这个C(‘SHOW_PAGE_TRACE’). 经过调试后发现此时这个值竟是个0,也即是没有开启。但是我确实在配置文件中开启了为true。@H_404_1@@H_404_1@这里就是onethink的改变。onethink在其后台有个配置系统,可以可视化的对配置进行修改。ot在其后台的公用控制器AdminController和前台的HomeController的初始化方法中都加入以下逻辑。
/* 读取数据库中的配置 */@H_404_1@$config = S('DB_CONFIG_DATA');@H_404_1@if(!$config){@H_404_1@ $config = D('Config')->lists();@H_404_1@ S('DB_CONFIG_DATA',$config);@H_404_1@}@H_404_1@C($config); //添加配置@H_404_1@$this->display();
意思就是读取数据库中的配置,合并到C函数的配置中。这样我们在以后使用c函数的时候看到的就是合并后的了。这就是为什么我们明明设置了SHOW_PAGE_TRACE为true,但还是为false。因为数据库中是false,最后合并吧前面的值给覆盖了。所以我们要想使用页面trace的功能,需要在ot的后台进行设置。
原文链接:/ajax/162293.html