Drupal 7 如何在Drupal7中使用实体\元数据\包装加载用户配置文件

Drupal 7 如何在Drupal7中使用实体\元数据\包装加载用户配置文件,drupal-7,entity,user-profile,Drupal 7,Entity,User Profile,我正在尝试使用实体\u元数据\u包装器加载用户配置文件: $user_profile = entity_metadata_wrapper('user', $uid); dpm($user_profile); 但我什么也没得到。用户字段使用user_load$uid加载良好;我做错了什么?entity\u metadata\u包装器希望第二个参数是对象,在本例中是用户对象。根据您的变量命名,您似乎在传递用户id。您可以使用按ID获取用户对象。Linas提供的信息显然不正确。使用实体id的实体\元

我正在尝试使用实体\u元数据\u包装器加载用户配置文件:

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

但我什么也没得到。用户字段使用user_load$uid加载良好;我做错了什么?

entity\u metadata\u包装器希望第二个参数是对象,在本例中是用户对象。根据您的变量命名,您似乎在传递用户id。您可以使用按ID获取用户对象。

Linas提供的信息显然不正确。使用实体id的实体\元数据\包装器是完全可以的。仅当您首先向函数传递对象时,函数才在内部使用uid,否则它会将参数直接传递给EntityDrupalWrapper

最终将调用该方法,该方法声明:重写以支持通过对象或id设置实体

此基本代码将演示仅使用用户id对实体\元数据\包装器的工作调用

$wrapper = entity_metadata_wrapper('user', 1);
dpm($wrapper->value());
输出将是属于管理员用户的所有数据的数组


您遇到的问题与在假定$uid有效的情况下传入的参数无关,需要更多信息进行故障排除。

我也遇到同样的问题代码无法正常工作返回空对象EntityDrupalWrapper

global $user;
$user_profile = entity_metadata_wrapper('user', $user->uid);
dpm($user_profile);
但该代码运行良好,并返回对象stdClass和所有用户字段,如name password和other

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

该方法显式地说://如果传递的实体是全局$user,那么我们只通过//传递用户id来加载用户对象。全局用户不是完全加载的实体。如果$type='user'&&is_object$data&&$data==$GLOBALS['user']{$data=$data->uid;},那么我发现它仍然使用uid。函数在内部使用uid加载用户数据$data=$data->uid;如果它是全局$user对象,因此它总是需要一个user对象或全局user对象,如果您非常渴望使用uid,您可以编写自己的包装函数,但事实是-如果您传递uid,并且您可以在粘贴的代码中清楚地看到它,则此函数将不返回任何内容。您需要使用dpm$user_profile->value;在你的例子中。如果您将第二个示例更改为dpm$wrapper;您将看到相同的空EntityDrupalWrapper。