Рейтинг:0

Доступ к объекту FieldItem из виджета

флаг in

У меня есть пользовательский FieldItem с методом, выполняющим расчет значений поля:

класс MyFieldItem расширяет FieldItemBase {
  ...
  публичная функция getAmountInEuros() {
    $amount = $this->get('amount')->getValue();
    $currency = $this->get('currency')->getValue();
    $exchange_rate = $this->getExchangeRate($currency);
    вернуть $exchange_rate * $сумма;
  }
  ...

У меня есть собственный виджет для этого FieldItem, где мне нужно сделать точно такой же расчет.

класс MyWidget расширяет WidgetBase {
  ...
  публичная функция getAmountInEuros() {
    ...
  }
  ...
}

Конечно, я бы предпочел прописать эту логику только в одном месте, желательно в определении FieldItem.

Как я могу получить доступ к соответствующему элементу FieldItem из виджета?

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

Рейтинг:1
флаг cn

Если вы создаете один элемент формы, у вас есть $delta для получения элемента поля.

публичная функция formElement(FieldItemListInterface $items, $delta, элемент массива $, массив &$form, FormStateInterface $form_state) {

  $евро = $items[$delta]->getAmountInEuros();

В других методах виджета вы можете зацикливаться на $items.

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

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