0
是prestashop跟踪挂钩调用的一些解决方案吗?特别是我需要检查钩子在哪里调用的钩子和钩子在做什么。很难找到钩子的函数。他们可以无处不在。Prestashop调试挂钩
是prestashop跟踪挂钩调用的一些解决方案吗?特别是我需要检查钩子在哪里调用的钩子和钩子在做什么。很难找到钩子的函数。他们可以无处不在。Prestashop调试挂钩
所有钩子执行都是通过funcion exec
从Hook
类完成的。您可以在这个函数的开头加上调试跟踪:
public static function exec($hook_name, $hook_args = array(), $id_module = null, $array_return = false, $check_exceptions = true,
$use_push = false, $id_shop = null)
{
$logger = new FileLogger(0);
$logger->setFilename(_PS_ROOT_DIR_.'/log/debug.log');
$e = new Exception;
$logger->logDebug('Hook '.$hook_name.' called from:');
$logger->logDebug($e->getTraceAsString());
....
这将创造/log/debug.log调试日志,将显示有关谁该挂钩的信息。
即使你重写这个函数来进行更好;)
您也可以调试所有的插入你的数据库。
在q
函数从Db
类(/classes/db/Db.php
)添加这个代码
protected function q($sql, $use_cache = true)
{
$logger = new FileLogger(0);
$logger->setFilename(_PS_ROOT_DIR_.'/log/sql.log');
$e = new Exception;
$logger->logDebug('SQL '.$sql.' executed from:');
$logger->logDebug($e->getTraceAsString());
...
。
@Marcin Jaworski回答编辑,以帮助您找到谁插入 – idnovate
你想知道哪个钩子被调用? – joseantgv
在我的商店有时DB包含双行。插入处于挂钩功能。所以有时他们必须跑两次。我无法找到何时何地。第二种情况是我找到HOOK :: EXEC,但是我找不到它的功能。他们必须在某个模块中。 –