В Drupal класс службы, определенный в файле модуля .services.yml, не нужно реализовывать. создать (контейнерный интерфейс $ контейнер)
. Даже не требуется реализовывать конкретный интерфейс PHP.
См. один из сервисов, реализованных ядром Drupal, например path_alias.manager оказание услуг.
path_alias.manager:
класс: Drupal\path_alias\AliasManager
аргументы:
- '@path_alias.repository'
- '@path_alias.whitelist'
- '@language_manager'
- '@cache.data'
Псевдоним менеджер
класс, который реализует эту службу, не реализует никаких Создайте()
метод; это просто реализовать конструктор, с параметрами, определенными в том же порядке, что и аргументы службы.
публичная функция __construct($alias_repository, AliasWhitelistInterface $whitelist, LanguageManagerInterface $language_manager, CacheBackendInterface $cache) {
$this->pathAliasRepository = $alias_repository;
$this->languageManager = $language_manager;
$this->белый список = $белый список;
$this->кэш = $кэш;
}
Классы, реализующие создать (контейнерный интерфейс $ контейнер)
и которые реализуют ContainerInjectionInterface
, например CronForm
класс, не возвращайте замыкание из создать (контейнерный интерфейс $ контейнер)
; на самом деле они возвращают только экземпляр самого себя. Видеть CronForm::создать()
.
общедоступная статическая функция create(ContainerInterface $container) {
вернуть новый статический ($ контейнер-> получить ('config.factory'),
$контейнер->получить('состояние'),
$контейнер->получить('cron'),
$container->получить('date.formatter'),
$container->получить('module_handler')
);
}
Если вы хотите реализовать фабричный сервис в Drupal, вам следует взять cache_factory сервис в качестве примера для написания кода.
cache_factory:
класс: Drupal\Core\Cache\CacheFactory
аргументы:
- '@настройки'
- '%cache_default_bin_backends%'
звонки:
- [setContainer, ['@service_container']]
Служба, использующая эту службу в качестве фабрики, — это, например, кеш.рендер оказание услуг.
кеш.рендер:
класс: Drupal\Core\Cache\CacheBackendInterface
теги:
- {имя: cache.bin}
фабрика:
- '@cache_factory'
- получать
аргументы:
- оказывать
фабрика ключ определяет, какая служба является фабричной службой и какой метод вызывается для этой фабричной службы; в аргументы ключ определяет аргументы, передаваемые этому методу. В этом случае он говорит Drupal создать экземпляр кеш.рендер службы путем создания экземпляра cache_factory обслуживание и звонки получить('рендеринг')
на этом объекте.