Masalahnya adalah Anda harus menetapkan nilai kosong yang kompatibel dengan tipe data bidang Anda. Jika tidak, Anda akan mendapatkan pengecualian yang diajukan. Lewat NULL
atau 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 title
bidang:
$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 value
dan format
properti) dan dengan demikian merupakan contoh dari EntityStructureWrapper , maka array()
atau NULL
akan 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 value
properti 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 array
atau NULL
adalah 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 clear
metode 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 callback
didefinisikan oleh hook_entity_property_info disebut. Memanggil clear
tidak melakukan itu.
EntityStructureWrapper::clear()
atauEntityValueWrapper::clear()
mungkin?