Debugging 预调试钩子
在prestashop中有跟踪钩子调用的解决方案吗?特别是动作钩子,我需要检查钩子在哪里被调用,以及钩子在做什么。很难找到钩子的函数。它们可以无处不在。所有钩子的执行都是通过Debugging 预调试钩子,debugging,prestashop,action-hook,Debugging,Prestashop,Action Hook,在prestashop中有跟踪钩子调用的解决方案吗?特别是动作钩子,我需要检查钩子在哪里被调用,以及钩子在做什么。很难找到钩子的函数。它们可以无处不在。所有钩子的执行都是通过hook类中的functionexec完成的。您可以在此函数开头添加调试跟踪: public static function exec($hook_name, $hook_args = array(), $id_module = null, $array_return = false, $check_exceptions =
hook
类中的functionexec
完成的。您可以在此函数开头添加调试跟踪:
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处创建调试日志,并显示有关调用此钩子的用户的信息
如果您重写此函数以执行此操作,效果会更好;)
您还可以调试数据库中的所有插入 添加此代码
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());
...
在
Db
class(/classes/Db/Db.php)的q
函数中,您想知道调用了哪些钩子吗?在我的存储中,有时Db包含两行。插入在钩子函数中。所以有时候他们必须跑两次。我找不到时间和地点。第二种情况是我找到了HOOK::EXEC,但我找不到它的函数在哪里。它们必须在某个模块中。@Marcin Jaworski的答案经过编辑,以帮助您找到插入者