समस्या यह है कि आपको एक खाली मान सेट करना होगा जो आपके क्षेत्र के डेटा प्रकार के अनुकूल हो। यदि आप नहीं करते हैं, तो आपको एक अपवाद मिलेगा। पास होने 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 = '';
अंत में, यदि आपका फ़ील्ड एक बहु-मूल्य फ़ील्ड है (और इस प्रकार आपका आवरण EntityListWrapper का एक उदाहरण है ) तो arrayया NULLसही खाली मान हैं, और निम्नलिखित तीन लाइनें बराबर हैं:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
नोट: clearरैपर पर विधि को कॉल करना फ़ील्ड को रिक्त मान पर सेट करने के बराबर नहीं है। जब फ़ील्ड को रिक्त मान पर सेट किया जाता है, तो वह EntityMetadataWrapper :: updateParent को फ़ील्ड के पैरेंट रैपर पर कॉल करता है । यह उन अन्य चीजों के बीच सुनिश्चित करता है, जिन्हें hook_entity_property_infosetter callback द्वारा परिभाषित किया जाता है। कॉलिंग ऐसा नहीं करती है।clear
EntityStructureWrapper::clear()याEntityValueWrapper::clear()शायद तरीकों की तलाश कर रहे हैं ?