Почему user_load не возвращает никаких значений для ролей пользователя? - PullRequest
0 голосов
/ 06 апреля 2011

Итак, у меня есть этот код в шаблоне:

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

который, насколько я понимаю, должен возвращать объект пользователя для пользователя с идентификатором 11812. И этот объект должен содержать массив ролей для этого пользователя в этой переменной:

$thisuser->roles

Но этот массив не существует.

Я отследил функцию user_load () в modules / user / user.module с помощью отладчика, и этот код должен заполнить объект $ user этим массивом role:

  $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);

но затем, когда мы нажимаем на следующую строку, которая должна инициализировать пустой массив "role" в объекте $ user, ничего не происходит:

    $user->roles = array();

В объекте вообще не отображается массив "role". Последующие дБ-запросы работают нормально и возвращают правильную информацию о роли, поэтому этот цикл while:

    while ($role = db_fetch_object($result)) {
      $user->roles[$role->rid] = $role->name;
    }

имеет правильные значения в $ role-> rid и $ role-> name каждый раз в цикле, но $ user-> role по-прежнему не существует, и назначения здесь не действуют.

Я бьюсь головой об этом - я не могу понять, что происходит. Я знаю, что могу просто запросить базу данных напрямую, чтобы получить роли пользователя, если я действительно должен, но почему бы не работал код user_load ()?

Кто-нибудь знает, что происходит?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

После долгих мучений я решил, что это не проблема в Drupal. Это мой тупой отладчик, MacGDBp. Имеется ошибка (или взаимодействие с версией плагина Xdebug для macports), из-за которой переменные экземпляра объекта не отображаются в инспекторе, если имеется более 32 переменных.

Так глупо.

В любом случае, если вы используете MacGDBp, остерегайтесь этой проблемы.

0 голосов
/ 06 апреля 2011

Что, если вы только что сделали user_load (11812)? Это всегда работало для меня до Drupal 6.

...