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)); работал для меня, но я не могу заставить работать несколько значений.

Другие вопросы по тегам