Я получаю сообщение об ошибке с оберткой метаданных.
у меня есть поле test => ссылка на сущность, которая является списком выбора. Я получаю следующую ошибку EntityMetadataWrapperException: указано недопустимое значение данных. Убедитесь, что он соответствует требуемому типу данных и формату.
$account = entity_load_single('user', $user->uid);
$acc_wrapper = entity_metadata_wrapper('user', $account);
$list = $acc_wrapper->test->value();
$exists = FALSE;
if (!empty($list)) {
foreach ($list as $item) {
if ($item->nid == $form_state['storage']['node']->nid) {
$exists = TRUE;
break;
}
}
}
if (!$exists) {
if (!$list) {
$list = array();
$list[] = $form_state['storage']['node']->nid;
}
$acc_wrapper->test->set($list);
$acc_wrapper->save();
Первые быстрые советы
$account = entity_load_single('user', $user->uid);
$acc_wrapper = entity_metadata_wrapper('user', $account);
Вам не нужно загружать объект, если вам не нужно, чтобы он был загружен после (или он уже загружен). Все, что вам нужно, это идентификатор, и позволить магии entity_metadata_wrapper действовать.
$acc_wrapper = entity_metadata_wrapper('user', $user->uid);
Я думаю, что ваша ошибка здесь
if (!$list) {
$list = array();
$list[] = $form_state['storage']['node']->nid;
}
$ list всегда инициируется из-за «$ list = $ acc_wrapper-> test-> value ();», поэтому вы никогда не выполняете условие полностью, а затем пытаетесь вернуть его назад и сохранить (потому что вы пропускаете ‘ }’ )… Не имеет смысла…
Может попробовать эту версию?
$acc_wrapper = entity_metadata_wrapper('user', $user->uid);
$list = $acc_wrapper->test->value();
$exists = FALSE;
if (!empty($list)) {
foreach ($list as $item) {
if ($item->nid == $form_state['storage']['node']->nid) {
$exists = TRUE;
break;
}
}
}
if (!$exists && !$list) {
$list = array($form_state['storage']['node']->nid);
$acc_wrapper->test = $list;
$acc_wrapper->save();
}
Других решений пока нет …