Il problema è che devi impostare un valore vuoto compatibile con il tipo di dati del tuo campo. In caso contrario, verrà generata un'eccezione. Il passaggio NULL
o array()
quando è prevista una stringa genererà quindi un errore.
Un'altra cosa da tenere a mente è che i dati che passi dipenderanno anche dal fatto che il tuo campo sia un singolo valore, un campo multi-valore o un campo con più proprietà.
Se il tuo campo è un valore singolo (e quindi il wrapper per il campo è un'istanza di EntityValueWrapper ), devi assegnargli un valore vuoto compatibile con il tipo di dati in questione . Ad esempio i due seguenti metodi sono equivalenti:
$wrapper->title = '';
$wrapper->title->set('');
Tuttavia, i seguenti tre esempi solleveranno un'eccezione, poiché i tipi di dati non sono compatibili con il title
campo:
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
Se il tuo campo è un campo con più proprietà (ad esempio un campo di testo formattato, che ha definito sia a value
che format
proprietà) e quindi un'istanza di EntityStructureWrapper , allora array()
o NULL
sarà il valore vuoto corretto. Quindi puoi fare quanto segue:
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
Ma in quel caso, passare una stringa vuota avrebbe generato un errore. Nota che avresti potuto scegliere di rendere value
vuota la proprietà, nel qual caso una stringa è il tipo di dati corretto:
$wrapper->field_formatted_text->value = '';
Infine, se il tuo campo è un campo multi-valore (e quindi il tuo wrapper è un'istanza di EntityListWrapper ) allora array
o NULL
sono i valori vuoti corretti e le seguenti tre righe sono equivalenti:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
Nota: la chiamata del clear
metodo sui wrapper non equivale a impostare il campo su un valore vuoto. Quando il campo è impostato su un valore vuoto, chiama EntityMetadataWrapper :: updateParent sul wrapper principale del campo. Questo assicura tra l'altro che viene chiamato il setter callback
definito da hook_entity_property_info . La chiamata clear
non lo fa.
EntityStructureWrapper::clear()
oEntityValueWrapper::clear()
forse?