問題は、フィールドのデータ型と互換性のある空の値を設定する必要があることです。そうしないと、例外が発生します。渡すNULL
またはarray()
文字列が予想される場合には、そのためにエラーが発生します。
留意すべきもう1つのことは、渡すデータは、フィールドが単一値、複数値フィールド、または複数のプロパティを持つフィールドであるかどうかにも依存するということです。
フィールドが単一の値である(したがって、フィールドのラッパーがEntityValueWrapperのインスタンスである)場合、問題のデータ型と互換性のある空の値を割り当てる必要があります。たとえば、次の2つのメソッドは同等です。
$wrapper->title = '';
$wrapper->title->set('');
ただし、次の3つの例では、データ型がtitle
フィールドと互換性がないため、例外が発生します。
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
あなたのフィールドは、複数(例えば、Aの両方に定義フォーマットのテキストフィールド、プロパティを持つフィールドの場合value
とformat
従って性)のインスタンスEntityStructureWrapper、次いでarray()
又はNULL
正しい空の値であろう。したがって、次のことができます。
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
ただし、その場合、空の文字列を渡すとエラーが発生します。value
代わりにプロパティを空にすることもできます。その場合、文字列は正しいデータ型です。
$wrapper->field_formatted_text->value = '';
最後に、フィールドが複数値フィールドである(したがって、ラッパーがEntityListWrapperのインスタンスである)場合、array
またはNULL
は正しい空の値であり、次の3行は同等です。
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
注:clear
ラッパーでメソッドを呼び出すことは、フィールドを空の値に設定することと同等ではありません。フィールドが空の値に設定されると、フィールドの親ラッパーでEntityMetadataWrapper :: updateParentを呼び出します。これにより、中でもhook_entity_property_infosetter callback
によって定義されたものが呼び出されるようになります。呼び出しclear
はそれを行いません。
EntityStructureWrapper::clear()
またはEntityValueWrapper::clear()
メソッドを探していますか?