ปัญหาคือคุณต้องตั้งค่าว่างที่เข้ากันได้กับชนิดข้อมูลของเขตข้อมูลของคุณ หากคุณไม่ทำคุณจะได้รับการยกเว้น การผ่านNULLหรือarray()เมื่อคาดว่าจะมีสตริงจะทำให้เกิดข้อผิดพลาด
สิ่งที่ควรทราบก็คือข้อมูลที่คุณส่งจะขึ้นอยู่กับว่าเขตข้อมูลของคุณเป็นค่าเดียวเขตข้อมูลหลายค่าหรือเขตข้อมูลที่มีคุณสมบัติหลายอย่าง
ถ้าเขตของคุณเป็นค่าเดียว (และเสื้อคลุมสำหรับฟิลด์เป็นตัวอย่างของEntityValueWrapper ) แล้วคุณควรกำหนดค่าว่างเข้ากันได้กับชนิดข้อมูลในคำถาม เช่นวิธีการสองวิธีต่อไปนี้เทียบเท่ากัน:
$wrapper->title = '';
$wrapper->title->set('');
อย่างไรก็ตามตัวอย่างสามตัวอย่างต่อไปนี้จะยกข้อยกเว้นเนื่องจากชนิดข้อมูลไม่เข้ากันกับtitleเขตข้อมูล:
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
ถ้าเขตของคุณเป็นเขตที่มีคุณสมบัติหลาย (เช่นสนามจัดรูปแบบข้อความที่กำหนดไว้ทั้งสองvalueและformatอสังหาริมทรัพย์) และทำให้เป็นตัวอย่างของEntityStructureWrapperแล้วarray()หรือNULLจะเป็นค่าที่ว่างเปล่าที่ถูกต้อง ดังนั้นคุณสามารถทำสิ่งต่อไปนี้:
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
แต่ในกรณีนั้นการส่งสตริงว่างจะทำให้เกิดข้อผิดพลาด โปรดทราบว่าคุณสามารถเลือกที่จะทำให้valueคุณสมบัติว่างเปล่าแทนซึ่งในกรณีนี้สตริงเป็นชนิดข้อมูลที่ถูกต้อง:
$wrapper->field_formatted_text->value = '';
ในที่สุดถ้าเขตข้อมูลของคุณเป็นเขตข้อมูลที่มีหลายค่า (และทำให้ wrapper ของคุณเป็นตัวอย่างของEntityListWrapper ) ดังนั้นarrayหรือNULLเป็นค่าว่างที่ถูกต้องและสามบรรทัดต่อไปนี้เทียบเท่ากัน:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
หมายเหตุ: การเรียกใช้clearเมธอดบนตัวตัดคำไม่เทียบเท่ากับการตั้งค่าฟิลด์เป็นค่าว่าง เมื่อเขตข้อมูลถูกตั้งค่าเป็นค่าว่างมันจะเรียกEntityMetadataWrapper :: updateParentบน wrapper หลักของเขตข้อมูล สิ่งนี้ทำให้แน่ใจได้ว่ามีสิ่งอื่น ๆ ที่hook_entity_property_infosetter callbackกำหนดไว้ถูกเรียก การโทรไม่ได้ทำเช่นนั้นclear
EntityStructureWrapper::clear()หรือEntityValueWrapper::clear()บางที?