Проблема в том, что вы должны установить пустое значение, которое совместимо с типом данных вашего поля. Если вы этого не сделаете, вы получите исключение. Поэтому передача NULL
или array()
ожидание строки вызовет ошибку.
Следует также помнить, что передаваемые данные также будут зависеть от того, является ли ваше поле одним значением, полем с несколькими значениями или полем с несколькими свойствами.
Если ваше поле представляет собой одно значение (и, следовательно, оболочка для поля является экземпляром EntityValueWrapper ), вам следует присвоить ему пустое значение, совместимое с данным типом данных . Например, два следующих метода эквивалентны:
$wrapper->title = '';
$wrapper->title->set('');
Однако следующие три примера вызовут исключение, потому что типы данных не совместимы с title
полем:
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
Если ваше поле является полем с несколькими свойствами (например, форматированным текстовым полем, в котором определены как a, так value
и format
свойством) и, таким образом, экземпляром EntityStructureWrapper , то array()
или NULL
будет правильным пустым значением. Таким образом, вы можете сделать следующее:
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
Но в этом случае передача пустой строки вызвала бы ошибку. Обратите внимание, что вы могли бы value
вместо этого сделать свойство пустым, и в этом случае строка является правильным типом данных:
$wrapper->field_formatted_text->value = '';
Наконец, если ваше поле является полем с несколькими значениями (и, следовательно, ваша обертка является экземпляром EntityListWrapper ), то array
или NULL
являются правильными пустыми значениями, и следующие три строки эквивалентны:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
Примечание. Вызов clear
метода для оболочек не эквивалентен установке поля в пустое значение. Когда для поля установлено пустое значение, оно вызывает EntityMetadataWrapper :: updateParent для родительской оболочки поля. Это обеспечивает, помимо прочего, то, что setter callback
определено в hook_entity_property_info . Звонок clear
не делает этого.
EntityStructureWrapper::clear()
илиEntityValueWrapper::clear()
методы, возможно?