Trong Drupal, lớp cho một dịch vụ được xác định trong tệp .services.yml của mô-đun không cần triển khai tạo (ContainerInterface $container)
. Nó thậm chí không được yêu cầu triển khai một giao diện PHP cụ thể.
Xem một trong các dịch vụ mà Drupal triển khai, ví dụ: path_alias.manager dịch vụ.
path_alias.manager:
lớp: Drupal\path_alias\AliasManager
tranh luận:
- '@path_alias.repository'
- '@path_alias.whitelist'
- '@language_manager'
- '@cache.data'
Các Trình quản lý bí danh
lớp thực hiện dịch vụ đó không thực hiện bất kỳ tạo ra()
phương pháp; nó chỉ thực hiện người xây dựng, với các tham số được xác định theo thứ tự giống như các đối số dịch vụ được liệt kê.
chức năng công khai __construct($alias_repository, AliasWhitelistInterface $whitelist, LanguageManagerInterface $language_manager, CacheBackendInterface $cache) {
$this->pathAliasRepository = $alias_repository;
$this->languageManager = $language_manager;
$this->whitelist = $whitelist;
$this->cache = $cache;
}
Các lớp thực hiện tạo (ContainerInterface $container)
và cái nào thực hiện ChứaTiêmGiao Diện
, ví dụ như CronForm
lớp, không trả lại một đóng cửa từ tạo (ContainerInterface $container)
; họ thực sự chỉ trả lại một phiên bản của chính họ. Nhìn thấy CronForm::tạo()
.
tạo hàm tĩnh công khai (ContainerInterface $container) {
trả lại tĩnh mới ($ container-> get ('config.factory'),
$container->get('trạng thái'),
$container->get('cron'),
$container->get('date.formatter'),
$container->get('module_handler')
);
}
Nếu bạn muốn triển khai dịch vụ nhà máy trong Drupal, bạn nên thực hiện cache_factory service làm ví dụ để viết mã của bạn.
cache_factory:
lớp: Drupal\Core\Cache\CacheFactory
tranh luận:
- '@cài đặt'
- '%cache_default_bin_backends%'
cuộc gọi:
- [setContainer, ['@service_container']]
Ví dụ, một dịch vụ sử dụng dịch vụ đó làm nhà máy là cache.render dịch vụ.
bộ nhớ cache.render:
lớp: Drupal\Core\Cache\CacheBackendInterface
thẻ:
- {tên: cache.bin}
nhà máy:
- '@cache_factory'
- được
tranh luận:
- kết xuất
Các nhà máy khóa xác định dịch vụ nào là dịch vụ của nhà máy và phương thức nào được gọi cho dịch vụ của nhà máy đó; các tranh luận key xác định các đối số được truyền cho phương thức đó. Trong trường hợp này, nó yêu cầu Drupal khởi tạo cache.render dịch vụ bằng cách khởi tạo cache_factory dịch vụ và gọi nhận ('kết xuất')
trên đối tượng đó.