Рейтинг:2

Внедрение зависимостей в FieldItemList

флаг ph

Я создаю несколько пользовательских классов, которые расширяют FieldItemList, и им нужно внедрить некоторые службы.

Я просмотрел основные классы, которые расширяют этот класс, и ни один из них не выполняет внедрение зависимостей, все они вызывают \Drupal::service().

Есть ли способ внедрить сервисы здесь или я должен следовать основному шаблону?

4uk4 avatar
флаг cn
Нет, по-прежнему нет возможности внедрить службы, и вы должны использовать статическую оболочку службы. См. этот комментарий и связанную проблему https://drupal.stackexchange.com/questions/224247/how-do-i-inject-a-dependency-into-a-fieldtype-plugin/224248#comment273484_224248
leymannx avatar
флаг ne
Отвечает ли это на ваш вопрос? [Как внедрить зависимость в плагин @FieldType?](https://drupal.stackexchange.com/questions/224247/how-do-i-inject-a-dependency-into-a-fieldtype-plugin)
Lambic avatar
флаг ph
FieldItemList, строго говоря, не является плагином типа поля, но похоже, что применимо то же самое. Я собираюсь обернуть нужные мне службы в свою собственную службу, поэтому мне нужно будет вызывать оболочку службы только один раз.
Рейтинг:1
флаг cn

Диспетчер подключаемых модулей типа поля создает экземпляры как FieldItem, так и FieldItemList через диспетчер типизированных данных:

Drupal\Core\Field\FieldTypePluginManager

  общедоступная функция createFieldItemList (FieldableEntityInterface $entity, $field_name, $values ​​= NULL) {
    // Используйте прототип API типизированных данных для быстрого создания экземпляров.
    вернуть $this->typedDataManager->getPropertyInstance($entity->getTypedData(), $field_name, $values);
  }

  общедоступная функция createFieldItem (FieldItemListInterface $items, $index, $values ​​= NULL) {
    // Используйте прототип API типизированных данных для быстрого создания экземпляров.
    вернуть $this->typedDataManager->getPropertyInstance($items, $index, $values);
  }

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

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

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