Das Problem ist, dass Sie einen leeren Wert festlegen müssen, der mit dem Datentyp Ihres Felds kompatibel ist. Wenn Sie dies nicht tun, wird eine Ausnahme ausgelöst. Übergeben NULL
oder array()
wenn eine Zeichenfolge erwartet wird, wird daher ein Fehler ausgelöst.
Beachten Sie außerdem, dass die übergebenen Daten auch davon abhängen, ob es sich bei Ihrem Feld um einen einzelnen Wert, ein mehrwertiges Feld oder ein Feld mit mehreren Eigenschaften handelt.
Wenn Ihr Feld ein einzelner Wert ist (und der Wrapper für das Feld daher eine Instanz von EntityValueWrapper ist ), sollten Sie ihm einen leeren Wert zuweisen, der mit dem betreffenden Datentyp kompatibel ist . Zum Beispiel sind die beiden folgenden Methoden äquivalent:
$wrapper->title = '';
$wrapper->title->set('');
Die folgenden drei Beispiele lösen jedoch eine Ausnahme aus, da die Datentypen nicht mit dem title
Feld kompatibel sind:
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
Wenn Ihr Feld ein Feld mit mehreren Eigenschaften ist (z. B. ein formatiertes Textfeld, das sowohl eine value
als auch eine format
Eigenschaft definiert) und somit eine Instanz von EntityStructureWrapper , ist array()
oder NULL
ist dies der richtige leere Wert. Sie können also Folgendes tun:
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
In diesem Fall hätte die Übergabe einer leeren Zeichenfolge jedoch einen Fehler ausgelöst. Beachten Sie, dass Sie die value
Eigenschaft auch leer lassen könnten. In diesem Fall ist eine Zeichenfolge der richtige Datentyp:
$wrapper->field_formatted_text->value = '';
Wenn Ihr Feld ein Feld mit mehreren Werten ist (und Ihr Wrapper somit eine Instanz von EntityListWrapper ist ), dann sind array
oder NULL
die richtigen leeren Werte und die folgenden drei Zeilen sind äquivalent:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
Hinweis: Das Aufrufen der clear
Methode für die Wrapper entspricht nicht dem Festlegen eines leeren Werts für das Feld. Wenn für das Feld ein leerer Wert festgelegt ist, wird EntityMetadataWrapper :: updateParent für den übergeordneten Wrapper des Felds aufgerufen . Dies stellt unter anderem sicher, dass das setter callback
durch hook_entity_property_info definierte aufgerufen wird. Anrufen clear
macht das nicht.
EntityStructureWrapper::clear()
oderEntityValueWrapper::clear()
Methoden?