Как внедрить пользовательскую зависимость в пользовательскую сущность?
На 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)
Как внедрить пользовательскую зависимость в пользовательскую сущность?
3 answers
Как внедрить пользовательскую зависимость в пользовательскую сущность?
Вы не можете; в соответствии с Службами и внедрением зависимостей документация:
Примечание: Невозможно внедрить службы в объект сущности. См. этот выпуск для получения более подробной информации.
Вам нужно будет получить услугу напрямую от \Drupal
.
Я забыл учесть наследование родительской __конструкции().
Вот решение:
public function __construct(array $values, $entity_type, $bundle = FALSE, $translations = []) {
parent::__construct($values, $entity_type, $bundle, $translations);
$this->customStuff = \Drupal::service('mymodule.mymodule_repository');
}
Вы добавили аннотации сущностей? Например:
/**
* 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