У меня есть следующее настраиваемое поле:
/**
* Плагинная реализация типа поля 'price_table'.
*
* @FieldType(
* id = "таблица_цен",
* default_widget = "price_table_widget",
* default_formatter = "price_table_formatter",
* )
*/
класс PriceTable расширяет FieldItemBase {
общедоступная статическая функция mainPropertyName(): строка {
вернуть «значение»;
}
схема общедоступной статической функции (FieldStorageDefinitionInterface $field_definition): массив {
возвращаться [
'столбцы' => [
'значение' => [
'тип' => 'клякса',
'размер' => 'большой',
'сериализовать' => ИСТИНА,
],
],
];
}
общедоступная статическая функция propertyDefinitions (FieldStorageDefinitionInterface $ field_definition): массив {
$properties['value'] = MapDataDefinition::create()
->setLabel(t('Данные таблицы'));
вернуть $свойства;
}
публичная функция setValue($values, $notify = TRUE) {
если (isset($значения) && !пусто($значения['таблица'])) {
$значения['значение'] = $значения['таблица'];
не установлен ($ значения ['таблица']);
родитель::setValue($values, $notify);
}
}
публичная функция isEmpty(): bool {
пытаться {
$value = $this->get('value')->getValue();
дпм($значение); //<<<
вернуть !is_array($value) || пустой ($ значение);
} поймать (MissingDataException | InvalidArgumentException $e) {
вернуть ЛОЖЬ;
}
}
}
с соответствующим виджетом (с использованием элемента формы таблицы) и форматированием. Редактирование проходит нормально, сериализованные данные сохраняются в записи базы данных моей сущности. Однако, когда дело доходит до форматирования, он ничего не отображает, потому что пустой()
выше всегда получает пустое значение и возвращает ЛОЖНЫЙ
. Блоб сохраняется в порядке (благодаря установить значение()
выше), но не извлекается полем.
Что мне здесь не хватает?