2014-02-09 3 views
0

Я пытаюсь получить профиль пользователя, загруженный entity_metadata_wrapper:Как загрузить профиль пользователя, используя entity_metadata_wrapper в Drupal 7

$user_profile = entity_metadata_wrapper('user', $uid); 
dpm($user_profile); 

, но я ничего не получаю обратно. Поля пользователя загружаются с помощью user_load ($ uid); Что я делаю не так?

ответ

2

entity_metadata_wrapper ожидает, что вторым параметром будет объект, в данном случае - объект пользователя. Согласно вашему названию переменной, кажется, что вы передаете идентификатор пользователя. Вы можете использовать user_load для извлечения пользовательского объекта по идентификатору.

+0

Метод явно говорит: // Если переданный объект является глобальным пользователем $, мы загружаем объект пользователя только // передавая идентификатор пользователя. Глобальный пользователь не является полностью загруженным объектом. if ($ type == 'user' && is_object ($ data) && $ data == $ GLOBALS ['user']) { $ data = $ data-> uid; } Так что я вижу, что он все равно использует uid. – NickOpris

+1

Функция использует uid внутренне для загрузки пользовательских данных $ data = $ data-> uid; в случае, если это глобальный объект $ user, поэтому он всегда ожидает объект (пользовательский объект или глобальный пользователь), вы можете написать свою собственную функцию обертки, если вы так хотите использовать uid, но факт в том, что эта функция вернет вас ничего, если вы передадите uid, и вы можете ясно видеть его в коде, который вы вставили. – Linas

9

Информация, предоставленная компанией Linas, является предположительно неправильной. Использование entity_metadata_wrapper с идентификатором объекта полностью в порядке. Функция использует uid внутренне, только если вы передаете ей объект, в противном случае он передает аргумент непосредственно EntityDrupalWrapper.

В конечном итоге вызывается метод set, который гласит: «Переопределено для поддержки установки объекта либо объектом, либо идентификатором».

Этот базовый код продемонстрирует рабочий вызов entity_metadata_wrapper с идентификатором пользователя.

$wrapper = entity_metadata_wrapper('user', 1); 
dpm($wrapper->value()); 

Выход будет массивом всех данных, принадлежащих пользователю admin.

Проблема, с которой вы сталкиваетесь, не связана с передаваемыми аргументами (предполагается, что значение $uid) и требует дополнительной информации для устранения неполадок.

0

У меня такая же проблема, код не работает возвращать пустой (Object) EntityDrupalWrapper

global $user; 
$user_profile = entity_metadata_wrapper('user', $user->uid); 
dpm($user_profile); 

Но что код работает хорошо и вернуться (Object) StdClass со всеми полями пользователей, как имя пароль и другие

global $user; 
$user = user_load($user->uid); 
$wrapper = entity_metadata_wrapper('user', $user); 
dpm($wrapper->value()); 
+0

Вам нужно использовать 'dpm ($ user_profile-> value());' в вашем примере. Если вы изменили свой второй пример на 'dpm ($ wrapper);' вы увидите тот же пустой EntityDrupalWrapper. –