El problema es que debe establecer un valor vacío que sea compatible con el tipo de datos de su campo. Si no lo hace, obtendrá una excepción. Pasar NULLo array()cuando se espera una cadena generará un error.
Otra cosa a tener en cuenta es que los datos que pase también dependerán de si su campo es un valor único, un campo de valores múltiples o un campo con múltiples propiedades.
Si su campo es un valor único (y, por lo tanto, el contenedor del campo es una instancia de EntityValueWrapper ), debe asignarle un valor vacío compatible con el tipo de datos en cuestión . Por ejemplo, los dos métodos siguientes son equivalentes:
$wrapper->title = '';
$wrapper->title->set('');
Sin embargo, los siguientes tres ejemplos generarán una excepción, porque los tipos de datos no son compatibles con el titlecampo:
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
Si su campo es un campo con múltiples propiedades (por ejemplo, un campo de texto con formato, que define tanto una valuey formatpropiedad) y por lo tanto una instancia de EntityStructureWrapper , a continuación, array()o NULLserá el valor vacío correcto. Entonces puedes hacer lo siguiente:
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
Pero en ese caso, pasar una cadena vacía habría provocado un error. Tenga en cuenta que podría haber optado por hacer que la valuepropiedad esté vacía, en cuyo caso una cadena es el tipo de datos correcto:
$wrapper->field_formatted_text->value = '';
Finalmente, si su campo es un campo de valores múltiples (y, por lo tanto, su contenedor es una instancia de EntityListWrapper ), arrayo NULLson los valores vacíos correctos, y las siguientes tres líneas son equivalentes:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
Nota: Llamar al clearmétodo en los contenedores no es equivalente a configurar el campo en un valor vacío. Cuando el campo se establece en un valor vacío, llama a EntityMetadataWrapper :: updateParent en el contenedor primario del campo. Esto asegura, entre otras cosas, que se llama lo setter callbackdefinido por hook_entity_property_info . Llamar clearno hace eso.
EntityStructureWrapper::clear()oEntityValueWrapper::clear()quizás?