Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 预调试钩子_Debugging_Prestashop_Action Hook - Fatal编程技术网

Debugging 预调试钩子

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 =

在prestashop中有跟踪钩子调用的解决方案吗?特别是动作钩子,我需要检查钩子在哪里被调用,以及钩子在做什么。很难找到钩子的函数。它们可以无处不在。

所有钩子的执行都是通过
hook
类中的function
exec
完成的。您可以在此函数开头添加调试跟踪:

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的答案经过编辑,以帮助您找到插入者