但是这样不方便今后进行框架的升级,需要每次升级完成后都再修改一面。
这里将采用扩展核心类的方式来实现该功能,这样不影响今后的升级。
首先在 App\Libraries 目录中添加扩展类 CodeIgniter.php ,代码如下:
[复制到剪贴板] |
<?php
namespace App\Libraries;
use CodeIgniter\Events\Events;
use CodeIgniter\CodeIgniter as BaseCodeIgniter;
/**
* 扩展核心类实现 SQL 执行数的统计功能
*/
class CodeIgniter extends BaseCodeIgniter
{
/**
* @var int|null 变量SQL执行次数
*/
protected $sql_queries = 0;
/**
* 函数 统计SQL执行次数
*/
public function collectDBQuery($query){
$this->sql_queries++;
}
public function initialize(){
//调用父类的方法,确保功能完整
parent::initialize();
//增加扩展初始化代码 注册SQL统计函数
Events::on('DBQuery', [$this, 'collectDBQuery']);
}
/**
* 增加替换 sql_queries 标签
*/
public function displayPerformanceMetrics(string $output): string
{
// 替换 sql_queries 标签
$output = str_replace('{sql_queries}', $this->sql_queries, $output);
// 调用父类的功能
return parent::displayPerformanceMetrics($output);
}
}
然后通过服务配置文件,将我们扩展的核心类注册到系统中
需要修改的文件是 App\Config\Services.php
在文件中添加如下函数,完成注册:
在文件中添加如下函数,完成注册:
[复制到剪贴板] |
/**
* 扩展 CodeIgniter核心类
* @return CodeIgniter
*/
public static function codeigniter(?App $config = null, bool $getShared = true)
{
if ($getShared) {
return static::getSharedInstance('codeigniter', $config);
}
$config ??= config(App::class);
return new \App\Libraries\CodeIgniter($config);
}
如果文章对您有帮助,给个赞赏吧!