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 NULLo 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 titlecampo:
$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 valueche formatproprietà) e quindi un'istanza di EntityStructureWrapper , allora array()o NULLsarà 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 valuevuota 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 arrayo NULLsono 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 clearmetodo 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 callbackdefinito da hook_entity_property_info . La chiamata clearnon lo fa.
EntityStructureWrapper::clear()oEntityValueWrapper::clear()forse?