ปัญหาคือคุณต้องตั้งค่าว่างที่เข้ากันได้กับชนิดข้อมูลของเขตข้อมูลของคุณ หากคุณไม่ทำคุณจะได้รับการยกเว้น การผ่าน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()
บางที?