我想获取请求和响应之间的查询(有多少查询和原始 SQL 查询)。
->getLastQuery()
仅返回 1 个最后查询。我想保存发送 HTTP 请求和接收 HTTP 响应之间的所有查询。
<?php
class Logger implements FilterInterface
{
use ResponseTrait;
public function before(RequestInterface $request, $arguments = null)
{
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
$this->db = \Config\Database::connect();
$this->db->getLastQuery()->getOriginalQuery();
if ($this->db->getLastQuery()->isWriteType()) {
echo "updated or write query";
}
$return = $this->db->getLastQuery()->getOriginalQuery();
$logger = new Client();
$logger->logQueries($return);
}
}
尝试使用调试工具栏。 调试工具栏提供有关当前页面请求的概览信息,包括基准测试结果、已运行的查询、请求和响应数据等。
或者,您可以通过订阅
DBQuery
事件来执行应用程序。这可以通过注册 app/Config/Events.php
类来完成,让它知道您想要在触发该事件时执行操作。
大多数事件都在
文件中定义。你 可以使用app/Config/Events.php
类’Events
订阅事件的操作 方法。第一个参数是要订阅的事件的名称。 第二个参数是一个可调用的,当该事件发生时将运行 触发:on()
<?php use CodeIgniter\Events\Events; Events::on('pre_system', ['MyClass', 'myFunction']);
在此示例中,每当执行 pre_system 事件时,都会出现一个 创建
的实例并运行MyClass
方法。 注意第二个参数可以是任何形式 可调用 PHP 识别:myFunction()
<?php // Call a standalone function Events::on('pre_system', 'some_function'); // Call on an instance method $user = new User(); Events::on('pre_system', [$user, 'someMethod']); // Call on a static method Events::on('pre_system', 'SomeClass::someMethod'); // Use a Closure Events::on('pre_system', static function (...$params) { // ... });
在您的
app/Config/Events.php
课程中,订阅 DBQuery
活动。
DBQuery
-:在数据库查询成功与否后调用。接收 \CodeIgniter\Database\Query
对象。 - 事件点
Events::on("DBQuery", static function (\CodeIgniter\Database\Query $query) {
// Add your SQL query logging logic here. I.e:
log_message("error", $query->getQuery());
});