以下是我要为商店确定的方案:
网站管理员登录,为用户创建订单,创建付款和/或为用户订单应用点数。
Watchdog记录所有这些,但作为管理员用户,当我们需要它作为客户用户时,采取行动(因此我们可以在该人员帐户上列出系统对其帐户执行的所有操作或订单)。
我看到看门狗有:
function watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL) {
global $user, $base_root;
// Prepare the fields to be logged
$log_message = array(
'type' => $type,
'message' => $message,
'variables' => $variables,
'severity' => $severity,
'link' => $link,
'user' => $user,
'request_uri' => $base_root . request_uri(),
'referer' => referer_uri(),
'ip' => ip_address(),
'timestamp' => time(),
);
// Call the logging hooks to log/process the message
foreach (module_implements('watchdog') as $module) {
module_invoke($module, 'watchdog', $log_message);
}
}
有没有办法覆盖全局$用户而不破解核心功能而不重复它?
我可以以某种方式将$ user作为变量传递吗?我可以在看门狗()之前调用$ user = user_load($ customer-> uid)来欺骗它来记录该用户吗?如果我能帮助它,我希望记录的UID不是0或1,因为根据用户配置文件(帐户,账单,订单等)跟踪系统某些方面的日志非常困难。
答案 0 :(得分:3)
您可能最好将其记录在单独的表中。 Watchdog用于临时系统消息,而不是面向用户的永久信息。如果不出意外,它会在cron上定期清理,这可能会让用户感到厌烦。
如果您这样做,那么看门狗功能有一个钩子hook_watchdog
,您的模块可以更改用户。您必须做一些有点聪明的事情。消息文本 - 使您在解析中解析和解压缩的序列化信息 - 但它肯定是可能的。
答案 1 :(得分:0)
试试这段代码:
global $user;
$original_user = $user;
session_save_session(FALSE);
$user = user_load(array("uid" => NEW_USER_UID));
watchdog(HERE);
$user = $original_user; // @TODO: switch user: user back
session_save_session(TRUE);
我不喜欢这样,但它有效:)