使用 hook_user_load() 修改用户对象

Chr*_*nch 5 drupal

在 Drupal 6 中,您可以使用类似于以下代码的代码:

function example_user($op, &$edit, &$account, $category = NULL) {
  switch($op) {
    case 'load':
      $account->fb_id ='xyz'
      break;
  }
}
Run Code Online (Sandbox Code Playgroud)

在 Drupal 7 中,文档说明hook_user_load()如下:

由于静态缓存,user_load_multiple()您不应使用此挂钩来修改 {users} 表本身返回的用户属性,因为这可能会导致从缓存加载时产生不可靠的结果。

为什么我得到的是用户而不仅仅是用户?

可以给它添加属性吗?

http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_load/7

kia*_*uno 3

您将获得一个用户对象数组,因为该钩子是从 调用的user_load_multiple(),通常会调用DrupalDefaultEntityController::load(),然后再调用DrupalDefaultEntityController::attachLoad()

可以添加自定义属性,但不要覆盖从{users}表加载的默认属性;正如文档中所报告的,在这种情况下,从缓存加载用户对象时可能会遇到一些问题,而这正是实体 API 通常所做的事情。