Tôi có loại trường tùy chỉnh mà tôi tạo bằng mô-đun tùy chỉnh. Nó là một trường văn bản đơn giản nơi người dùng nhập vào một chuỗi. Tôi muốn giữ lại hai bản sao của trường này:
- Giá trị chuỗi chính xác như người dùng đã nhập.
- Một giá trị an toàn của cùng một chuỗi.
Đây là cách tôi tạo trường:
lớp MyItem mở rộng FieldItemBase {
/**
* {@inheritdoc}
*/
lược đồ hàm tĩnh công khai (FieldStorageDefinitionInterface $field_definition) {
trở lại [
'cột' => [
'giá trị' => [
'loại' => 'văn bản',
'kích thước' => 'nhỏ',
'không rỗng' => SAI,
],
'giá trị an toàn' => [
'loại' => 'văn bản',
'kích thước' => 'nhỏ',
'không rỗng' => SAI,
],
],
];
}
â¦
}
Tôi cho rằng tôi nên tạo ra một giá trị an toàn
của chuỗi trong hook_node_presave()
và bằng cách nào đó xâm nhập vào thực thể ở đó (nhưng việc sửa chữa những giả định này đều được hoan nghênh).
Tôi không gặp vấn đề gì khi nhận giá trị chuỗi do người dùng nhập và để tính giá trị an toàn:
$value = $entity->field_myfield->getString();
$safevalue = makeSafe($value);
Nhưng tôi không biết làm thế nào để có được $safevalue
được lưu trữ trong cơ sở dữ liệu.
Chỉnh sửa
Tôi thấy rằng điều này có hai câu trả lời gần như giống hệt nhau. Cả hai đều hoạt động tốt nếu số lượng của trường là một, vì vậy tôi đã nâng cấp cả hai. Vì tôi không thể chấp nhận cả hai, nên tôi đã chấp nhận một từ apaderno để biết thêm chi tiết về propertyDefinitions()
.
Tôi vẫn không thể làm cho điều này hoạt động với trường đa giá trị, nhưng tôi nghĩ rằng có lẽ cần phải là một câu hỏi riêng.