为什么user_load不返回用户角色的任何值?

时间:2011-04-05 20:42:16

标签: php drupal drupal-theming

所以我在模板中有这个代码:

$thisuser = user_load(array('uid' => '11812'));

据我所知,应该为uid为11812的用户返回一个用户对象。该对象应包含该变量中该用户的一组角色:

$thisuser->roles

但那个数组不存在。

我已经使用调试器跟踪modules / user / user.module中的user_load()函数,并且此代码应使用该角色数组填充$ user对象:

  $result = db_query('SELECT * FROM {users} u WHERE '. implode(' AND ', $query), $params);

  if ($user = db_fetch_object($result)) {
    $user = drupal_unpack($user);

    $user->roles = array();
    if ($user->uid) {
      $user->roles[DRUPAL_AUTHENTICATED_RID] = 'authenticated user';
    }
    else {
      $user->roles[DRUPAL_ANONYMOUS_RID] = 'anonymous user';
    }
    $result = db_query('SELECT r.rid, r.name FROM {role} r INNER JOIN {users_roles} ur ON ur.rid = r.rid WHERE ur.uid = %d', $user->uid);
    while ($role = db_fetch_object($result)) {
      $user->roles[$role->rid] = $role->name;
    }
    user_module_invoke('load', $user_info, $user);
  }
  else {
    $user = FALSE;
  }

通过这一行,一切都很好:

    $user = drupal_unpack($user);

但是,当我们点击下一行时,它应该在$ user对象中初始化一个空的“roles”数组,没有任何反应:

    $user->roles = array();

根本没有“roles”数组显示在对象中。后续的数据库查询工作正常,并返回正确的角色信息,因此这个循环:

    while ($role = db_fetch_object($result)) {
      $user->roles[$role->rid] = $role->name;
    }
每次循环时,

都有$ role-> rid和$ role->名称中的正确值,但$ user->角色仍然不存在,此处的分配无效。

我正在反对这一点 - 我无法弄清楚发生了什么。我知道我可以直接查询db以获取用户的角色,如果我真的必须,但为什么user_load()代码不起作用?

任何人都知道发生了什么事吗?

感谢。

2 个答案:

答案 0 :(得分:0)

如果您刚刚执行了user_load(11812)该怎么办?通过Drupal 6,这一直对我有用。

答案 1 :(得分:0)

经过多次痛苦,我确定这不是Drupal的问题。这是我的愚蠢的调试器,MacGDBp。它有一个错误(或与Xdebug插件的macports版本的交互),当有超过32个变量时,它会导致对象实例变量不显示在检查器中。

太愚蠢了。

无论如何,如果你正在使用MacGDBp,请注意这个问题。