EntityMetadataWrapperException: недопустимое значение данных, данное при установке поля файла
Не могу установить file_field
в field_collection
Имеет узел $order и field_collection field_blueprints
:
<?php
$entity_type = "field_collection_item";
$blueprint_obj = entity_create($entity_type, array('field_name' => "field_blueprints") );
$blueprint_obj->setHostEntity('node', $order);
$blueprint_entity = entity_metadata_wrapper($entity_type, $blueprint_obj);
date_default_timezone_set("UTC");
$blueprint_entity->field_blueprint_file->file->set((array)$file);
$blueprint_entity->field_blueprint_comment = (string) $file->filename;
$blueprint_obj->save();
node_save($order);
И этот код выдает ошибку:
EntityMetadataWrapperException: указано неверное значение данных. Убедитесь, что он соответствует требуемому типу данных и формату. в
EntityDrupalWrapper->set()
(строка 736 сайтов //all/modules/entity/includes/entity.wrapper.inc).
Я также попробовал:
$blueprint_entity->field_blueprint_file->set((array)$file)
$blueprint_entity->field_blueprint_file->set(array('fid'=>$file->fid))
1 ответ
Вам нужно либо передать объект файла или массив с fid
ключ, чтобы заставить это работать.
Так что либо:
// Single value field
$blueprint_entity->field_blueprint_file = array('fid' => $file->fid);
// Multi-value field
$blueprint_entity->field_blueprint_file[] = array('fid' => $file->fid);
или же:
// Single value field
$blueprint_entity->field_blueprint_file = $file;
// Multi-value field
$blueprint_entity->field_blueprint_file[] = $file;
Вот полный пример использования value()
, set()
а также save()
со страницы упаковщиков метаданных сущности:
<?php
$containing_node = node_load($nid);
$w_containing_node = entity_metadata_wrapper('node', $containing_node);
// Load the file object in any way
$file_obj = file_load($fid);
$w_containing_node->field_attachment_content->file->set( $file_obj );
// ..or pass an array with the fid
$w_containing_node->field_attachment_content->set( array('fid' => $fid) );
$w_containing_node->save();
?>
Также при работе с многозначным полем (количество элементов> 1), убедитесь, что вы заключили его в дополнительный массив.
$wrapper->field_image->set(array('fid' => $file->fid));
работал для меня, но я не могу заставить работать несколько значений.