Vấn đề là bạn phải đặt một giá trị trống tương thích với kiểu dữ liệu của trường của bạn. Nếu bạn không, bạn sẽ có một ngoại lệ được nêu ra. Do đó, việc vượt qua NULL
hoặc array()
khi một chuỗi được mong đợi sẽ gây ra lỗi.
Một lưu ý khác là dữ liệu bạn truyền cũng sẽ phụ thuộc vào việc trường của bạn là một giá trị đơn, trường đa giá trị hay trường có nhiều thuộc tính.
Nếu trường của bạn là một giá trị duy nhất (và do đó, trình bao bọc cho trường là một thể hiện của EntityValueWrapper ) thì bạn nên gán cho nó một giá trị trống tương thích với loại dữ liệu được đề cập . Ví dụ, hai phương thức sau là tương đương:
$wrapper->title = '';
$wrapper->title->set('');
Tuy nhiên, ba ví dụ sau đây sẽ đưa ra một ngoại lệ, vì các kiểu dữ liệu không tương thích với title
trường:
$wrapper->title->set();
$wrapper->title->set(NULL);
$wrapper->title->set(array());
Nếu trường của bạn là một trường có nhiều thuộc tính (ví dụ: trường văn bản được định dạng, xác định cả a value
và thuộc format
tính) và do đó, một thể hiện của EntityStr structWrapper , thì array()
hoặc NULL
sẽ là giá trị trống chính xác. Vì vậy, bạn có thể làm như sau:
$wrapper->field_formatted_text = array();
$wrapper->field_formatted_text = NULL;
Nhưng trong trường hợp đó, việc truyền một chuỗi rỗng sẽ gây ra lỗi. Lưu ý rằng bạn có thể đã chọn làm cho thuộc value
tính trống thay vào đó, trong trường hợp đó, một chuỗi là kiểu dữ liệu chính xác:
$wrapper->field_formatted_text->value = '';
Cuối cùng, nếu trường của bạn là trường đa giá trị (và do đó, trình bao bọc của bạn là một thể hiện của EntityListWrapper ) thì array
hoặc NULL
là các giá trị trống chính xác và ba dòng sau là tương đương:
$wrapper->field_example_multiple->set();
$wrapper->field_example_multiple = array();
$wrapper->field_example_multiple = NULL;
Lưu ý: Gọi clear
phương thức trên các hàm bao không tương đương với việc đặt trường thành một giá trị trống. Khi trường được đặt thành một giá trị trống, nó sẽ gọi EntityMetadataWrapper :: updateParent trên trình bao bọc cha của trường. Điều này đảm bảo trong số những thứ khác setter callback
được định nghĩa bởi hook_entity_property_info được gọi. Gọi điện thoại clear
không làm điều đó.
EntityStructureWrapper::clear()
hoặcEntityValueWrapper::clear()
phương pháp có lẽ?