打开CodeIgniter 4 的默认首页,可以在页面底部看到页面执行时间的统计。
因为之前的老asp博客系统中有SQL执行数的统计功能,所以打算给新系统也实现这个功能。
先查看CodeIgniter 4 的框架代码和模版代码分析一下 时间统计功能的实现。
首先查看view目录中的模版文件,可以看到模版[welcome_message.php]中显示时间的代码如下:
可以看出来是定义了一个宏变量 {elapsed_time} 。
这样在框架系统中应该会有处理该变量的逻辑。
[复制到剪贴板] |
<p>Page rendered in {elapsed_time} seconds</p>
可以看出来是定义了一个宏变量 {elapsed_time} 。
这样在框架系统中应该会有处理该变量的逻辑。
在框架系统的文件中搜索该变量名称,可以发现该变量在文件 system/CodeIgniter.php中处理,代码如下:
[复制到剪贴板] |
/**
* Replaces the elapsed_time tag.
*/
public function displayPerformanceMetrics(string $output): string
{
return str_replace('{elapsed_time}', (string) $this->totalTime, $output);
}
先模仿上面的功能来实现,为了简单,这里也只修改一个文件 system/CodeIgniter.php
首先在文件中增加一个变量和一个函数[b]
[b]然后修改启动函数,注册事件:
最后修改宏处理代码,进行宏的变量值替换
[复制到剪贴板] |
/**
* SQLQueryNums.
*
* @var int|null
*/
protected $sql_queries = 0;
/**
* 统计SQL执行次数
*/
public function collectDBQuery($query){
$this->sql_queries++;
}
[b]然后修改启动函数,注册事件:
[复制到剪贴板] |
public function run(?RouteCollectionInterface $routes = null, bool $returnResponse = false)
{
//增加 事件注册代码
Events::on('DBQuery', [$this, 'collectDBQuery']);
最后修改宏处理代码,进行宏的变量值替换
[复制到剪贴板] |
/**
* Replaces the elapsed_time tag.
*/
public function displayPerformanceMetrics(string $output): string
{
$output = str_replace('{sql_queries}', $this->sql_queries, $output);
return str_replace('{elapsed_time}', (string) $this->totalTime, $output);
}