Как внедрить пользовательскую зависимость в пользовательскую сущность?


На Drupal 8, в пользовательском классе сущностей, я пытаюсь загрузить репозиторий в конструктор, чтобы иметь возможность использовать пользовательские функции в preSave().

class MyEntity extends ContentEntityBase implements MyModuleInterface {

private $customStuff;

public function __construct(array $values, $entity_type, &$bundle = FALSE, $translations = []) {
        $this->customStuff = \Drupal::service('mymodule.mymodule_repository');
  }

(Услуга определена в .services.yml в правильном модуле)

Но у меня есть ошибка:

На веб-сайте произошла непредвиденная ошибка. Пожалуйста, повторите попытку позже.Drupal\Компонент\Плагин\Исключение\Pluginnotfoundexception: Тип сущности "" не существует. в Drupal\Ядро\Сущность\Entitytypemanager->Получить определение() (строка 133 из core/lib/Drupal/Core/Entity/EntityTypeManager.php). Drupal\Ядро\Сущность\EntityManager->Получить определение (НОЛЬ) (Строка: 410)

Как внедрить пользовательскую зависимость в пользовательскую сущность?

 2
Author: Promo, 2018-04-13

3 answers

Как внедрить пользовательскую зависимость в пользовательскую сущность?

Вы не можете; в соответствии с Службами и внедрением зависимостей документация:

Примечание: Невозможно внедрить службы в объект сущности. См. этот выпуск для получения более подробной информации.

Вам нужно будет получить услугу напрямую от \Drupal.

 2
Author: Clive, 2018-04-13 10:41:21

Я забыл учесть наследование родительской __конструкции().

Вот решение:

  public function __construct(array $values, $entity_type, $bundle = FALSE, $translations = []) {
    parent::__construct($values, $entity_type, $bundle, $translations);
    $this->customStuff = \Drupal::service('mymodule.mymodule_repository');
  }
 1
Author: Promo, 2018-04-13 10:37:42

Вы добавили аннотации сущностей? Например:

/**
 * Defines MyEntity entity.
 *
 * @ingroup my_entity
 *
 * @ContentEntityType(
 *   id = "my_entity",
 *   label = @Translation("My Entity"),
...
class MyEntity extends ContentEntityBase implements MyModuleInterface {
...

Https://www.drupal.org/docs/8/api/entity-api/structure-of-an-entity-annotation

 0
Author: AlbionBrown, 2018-04-13 09:47:06