În Drupal, clasa pentru un serviciu definit într-un fișier modul .services.yml nu trebuie să fie implementată create(ContainerInterface $container)
. Nici măcar nu se solicită implementarea unei interfețe PHP specifice.
Vedeți unul dintre serviciile implementate de bază Drupal, de exemplu path_alias.manager serviciu.
path_alias.manager:
clasa: Drupal\path_alias\AliasManager
argumente:
- „@path_alias.repository”
- „@path_alias.whitelist”
- „@language_manager”
- „@cache.data”
The AliasManager
clasa care implementează acel serviciu nu implementează niciunul crea()
metodă; doar implementează constructor, cu parametrii definiți în aceeași ordine sunt listate argumentele serviciului.
funcția publică __construct($alias_repository, AliasWhitelistInterface $whitelist, LanguageManagerInterface $language_manager, CacheBackendInterface $cache) {
$this->pathAliasRepository = $alias_repository;
$this->languageManager = $language_manager;
$this->whitelist = $listă albă;
$this->cache = $cache;
}
Clasele care implementează create(ContainerInterface $container)
și care implementează ContainerInjectionInterface
, de exemplu cel CronForm
clasă, nu returnați o închidere de la create(ContainerInterface $container)
; ei returnează de fapt doar o instanță a lor. Vedea CronForm::create()
.
funcția publică statică create(ContainerInterface $container) {
returnează static nou ($container->get('config.factory'),
$container->get('state'),
$container->get('cron'),
$container->get('data.formatter'),
$container->get('module_handler')
);
}
Dacă doriți să implementați un serviciu din fabrică în Drupal, ar trebui să luați cache_factory serviciu ca exemplu pentru a vă scrie codul.
cache_factory:
clasa: Drupal\Core\Cache\CacheFactory
argumente:
- „@settings”
- „%cache_default_bin_backends%”
apeleaza:
- [setContainer, ['@service_container']]
Un serviciu care folosește acel serviciu ca fabrică este, de exemplu, the cache.render serviciu.
cache.render:
clasa: Drupal\Core\Cache\CacheBackendInterface
Etichete:
- { nume: cache.bin }
fabrică:
- „@cache_factory”
- obține
argumente:
- reda
The fabrică cheia definește care serviciu este serviciul din fabrică și ce metodă este apelată pentru acel serviciu din fabrică; cel argumente cheia definește argumentele transmise acelei metode. În acest caz, îi spune lui Drupal să instanțieze cache.render serviciu prin instanțierea cache_factory service și apelare obtine('renda')
pe acel obiect.