У меня есть настраиваемый тип поля, который я создаю с помощью настраиваемого модуля. Это обычное текстовое поле, в которое пользователь вводит строку. Я хочу сохранить две копии этого поля:
- Точное строковое значение, введенное пользователем.
- Безопасное значение той же строки.
Вот как я создаю поле:
класс MyItem расширяет FieldItemBase {
/**
* {@inheritdoc}
*/
схема общедоступной статической функции (FieldStorageDefinitionInterface $field_definition) {
возвращаться [
'столбцы' => [
'значение' => [
'тип' => 'текст',
'размер' => 'крошечный',
'не нуль' => ЛОЖЬ,
],
'безопасное значение' => [
'тип' => 'текст',
'размер' => 'крошечный',
'не нуль' => ЛОЖЬ,
],
],
];
}
¦
}
Я предполагаю, что я должен создать безопасная стоимость
строки в hook_node_presave()
и как-то проникнуть туда в сущности (но поправки к этим предположениям приветствуются).
У меня нет проблем с получением строкового значения, введенного пользователем, и вычислением безопасного значения:
$value = $entity->field_myfield->getString();
$safevalue = makeSafe($value);
Но я не знаю, как получить $безопасное значение
хранится в базе данных.
Редактировать
Я вижу, что у этого есть два почти идентичных ответа. Оба работают нормально, если мощность поля равна единице, поэтому я проголосовал за оба. Поскольку я не могу принять оба, я принял тот, что от apaderno, для дополнительной информации о определения свойств ()
.
Я до сих пор не могу заставить это работать с многозначным полем, но я думаю, что это, вероятно, должен быть отдельный вопрос.