O problema é que você deve definir um valor vazio que seja compatível com o tipo de dados do seu campo. Caso contrário, você receberá uma exceção. Passar NULL
ou array()
quando uma sequência é esperada gerará um erro.
Outro aspecto a ter em mente é que os dados transmitidos também dependerão se o seu campo for um valor único, um campo com vários valores ou um campo com várias propriedades.
Se o seu campo for um valor único (e, portanto, o wrapper do campo for uma instância do EntityValueWrapper ), você deverá atribuir a ele um valor vazio compatível com o tipo de dados em questão . Por exemplo, os dois métodos a seguir são equivalentes:
$wrapper->title = '';
$wrapper->title->set('');
No entanto, os três exemplos a seguir gerarão uma exceção, porque os tipos de dados não são compatíveis com o title
campo:
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
Se o seu campo for um campo com várias propriedades (por exemplo, um campo de texto formatado, que definiu a value
e a format
propriedade) e, portanto, uma instância do EntityStructureWrapper , array()
ou NULL
será o valor vazio correto. Então você pode fazer o seguinte:
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
Mas, nesse caso, passar uma string vazia teria gerado um erro. Observe que você poderia optar por deixar a value
propriedade vazia . Nesse caso, uma sequência é o tipo de dados correto:
$wrapper->field_formatted_text->value = '';
Finalmente, se o campo é um campo multi-valor (e, assim, o seu invólucro é um exemplo de EntityListWrapper ), em seguida, array
ou NULL
são os valores de correcção vazios, e as três linhas seguintes são equivalentes:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
Nota: Chamar o clear
método nos wrappers não é equivalente a configurar o campo para um valor vazio. Quando o campo é definido como um valor vazio, ele chama EntityMetadataWrapper :: updateParent no wrapper pai do campo. Isso garante, entre outras coisas, que o setter callback
definido por hook_entity_property_info seja chamado. Ligar clear
não faz isso.
EntityStructureWrapper::clear()
ouEntityValueWrapper::clear()
talvez?