Проблема полягає в тому, що ви повинні встановити порожнє значення, сумісне з типом даних вашого поля. Якщо цього не зробите, ви отримаєте виняток. Таким чином, передача 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
визначеним hoke_entity_property_info . Дзвінки clear
цього не роблять.
EntityStructureWrapper::clear()
абоEntityValueWrapper::clear()
методи?