Problem polega na tym, że musisz ustawić pustą wartość, która jest zgodna z typem danych twojego pola. Jeśli tego nie zrobisz, pojawi się wyjątek. Przekazanie NULL
lub array()
oczekiwanie ciągu spowoduje zatem błąd.
Inną rzeczą, o której należy pamiętać, jest to, że przekazywane dane będą również zależeć od tego, czy twoje pole jest pojedynczą wartością, polem o wielu wartościach, czy polem o wielu właściwościach.
Jeśli twoje pole ma pojedynczą wartość (a zatem opakowanie dla tego pola jest instancją EntityValueWrapper ), powinieneś przypisać mu pustą wartość zgodną z danym typem danych . Na przykład dwie następujące metody są równoważne:
$wrapper->title = '';
$wrapper->title->set('');
Jednak następujące trzy przykłady spowodują wyjątek, ponieważ typy danych nie są zgodne z title
polem:
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
Jeśli twoje pole jest polem z wieloma właściwościami (na przykład sformatowanym polem tekstowym, które zdefiniowało zarówno a, jak value
i format
właściwość), a zatem wystąpieniem EntityStructureWrapper , wówczas array()
lub NULL
będzie poprawna pusta wartość. Możesz więc wykonać następujące czynności:
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
Ale w takim przypadku przekazanie pustego ciągu spowodowałoby błąd. Zauważ, że możesz value
zamiast tego wybrać, aby właściwość była pusta, w którym to przypadku łańcuch jest poprawnym typem danych:
$wrapper->field_formatted_text->value = '';
Wreszcie, jeśli twoje pole jest polem o wielu wartościach (a zatem twoje opakowanie jest instancją EntityListWrapper ), to array
lub NULL
są poprawnymi pustymi wartościami, a następujące trzy wiersze są równoważne:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
Uwaga: Wywołanie clear
metody na opakowaniach nie jest równoważne ustawieniu pola na pustą wartość. Gdy pole jest ustawione na pustą wartość, wywołuje EntityMetadataWrapper :: updateParent na opakowaniu nadrzędnym pola. Zapewnia to między innymi, że wywoływane jest setter callback
zdefiniowane przez hook_entity_property_info . Dzwonienie clear
tego nie robi.
EntityStructureWrapper::clear()
lubEntityValueWrapper::clear()
metod?