Masalahnya adalah Anda harus menetapkan nilai kosong yang kompatibel dengan tipe data bidang Anda. Jika tidak, Anda akan mendapatkan pengecualian yang diajukan. Lewat NULLatau array()saat string diharapkan akan memunculkan kesalahan.
Hal lain yang perlu diingat adalah bahwa data yang Anda lewati juga akan bergantung pada apakah bidang Anda adalah nilai tunggal, bidang multi-nilai, atau bidang dengan beberapa properti.
Jika bidang Anda adalah nilai tunggal (dan karenanya pembungkus untuk bidang tersebut adalah turunan dari EntityValueWrapper ) maka Anda harus menetapkannya sebagai nilai kosong yang kompatibel dengan tipe data yang dimaksud . Misalnya, dua metode berikut ini setara:
$wrapper->title = '';
$wrapper->title->set('');
Namun tiga contoh berikut ini akan memunculkan pengecualian, karena tipe data tidak kompatibel dengan titlebidang:
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
Jika bidang Anda adalah bidang dengan beberapa properti (misalnya bidang teks yang diformat, yang mendefinisikan a valuedan formatproperti) dan dengan demikian merupakan contoh dari EntityStructureWrapper , maka array()atau NULLakan menjadi nilai kosong yang benar. Jadi, Anda dapat melakukan hal berikut:
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
Tetapi dalam kasus itu, melewatkan string kosong akan menimbulkan kesalahan. Perhatikan bahwa Anda bisa memilih untuk membuat valueproperti itu kosong, dalam hal ini string adalah tipe data yang benar:
$wrapper->field_formatted_text->value = '';
Akhirnya, jika bidang Anda adalah bidang multi-nilai (dan karenanya pembungkus Anda adalah turunan dari EntityListWrapper ) maka arrayatau NULLadalah nilai kosong yang benar, dan tiga baris berikut ini setara:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
Catatan: Memanggil clearmetode pada pembungkus tidak sama dengan menyetel bidang ke nilai kosong. Ketika bidang diatur ke nilai kosong, maka panggilan EntityMetadataWrapper :: updateParent pada pembungkus induk bidang. Ini memastikan antara lain bahwa yang setter callbackdidefinisikan oleh hook_entity_property_info disebut. Memanggil cleartidak melakukan itu.
EntityStructureWrapper::clear()atauEntityValueWrapper::clear()mungkin?