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 NULL
o 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 title
campo:
$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 value
y format
propiedad) y por lo tanto una instancia de EntityStructureWrapper , a continuación, array()
o NULL
será 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 value
propiedad 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 ), array
o NULL
son 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 clear
mé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 callback
definido por hook_entity_property_info . Llamar clear
no hace eso.
EntityStructureWrapper::clear()
oEntityValueWrapper::clear()
quizás?