Рейтинг:0

Средство форматирования настраиваемого поля с большим двоичным объектом, значение всегда пустое

флаг lc

У меня есть следующее настраиваемое поле:

/**
 * Плагинная реализация типа поля '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) {
      вернуть ЛОЖЬ;
    }
  }

}

с соответствующим виджетом (с использованием элемента формы таблицы) и форматированием. Редактирование проходит нормально, сериализованные данные сохраняются в записи базы данных моей сущности. Однако, когда дело доходит до форматирования, он ничего не отображает, потому что пустой() выше всегда получает пустое значение и возвращает ЛОЖНЫЙ. Блоб сохраняется в порядке (благодаря установить значение() выше), но не извлекается полем.

Что мне здесь не хватает?

Рейтинг:0
флаг lc

Ничего... :-)

публичная функция isEmpty(): bool {
  пытаться {
    $value = $this->getValue();

Так просто.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.