Drupal → Основные понятия в Plugin API

22.02.2014

Как я уже писал — плагины это ООП замена info-хуков из предыдущих версий друпала. Самое время разобраться с основными понятиями:

Plugin

Класс, реализующий заранее определённый набор методов. Класс располагается по определённому адресу, содержит аннотацию и обычно расширяет PluginBase. Примеры плагинов — форматтер полей типа Email, блок выбора языка, Views фильтр модуля Search.

Plugin definition

Информация о плагине (id, title и т.п.). Обычно хранится в аннотации к классу, но может генерироваться динамически. Структура зависит от типа плагина. Подробнее.

Plugin manager или Plugin type

Центральный класс, отвечающий за поиск плагинов определённого типа (plugin discovery) и создание их экземпляров (plugin instance). Обычно наследуется от DefaultPluginManager или PluginManagerBase. Все плагин-менеджеры являются сервисами. Примеры плагин-менеджеров — AggregatorPluginManager, TipPluginManager, CKEditorPluginManager. Подробнее.

Plugin discovery

Делится на два понятия:

1) Plugin discovery method — метод плагин-менеджера, отвечающий за поиск plugin definitions с помощью plugin discovery component. Обычно это DefaultPluginBase::getDefinitions().

2) Plugin discovery component — класс, отвечающий за поиск plugin definitions. Основной discovery component это конечно AnnotatedClassDiscovery, получающий информацию из аннотаций. Так же есть — StaticDiscovery, HookDiscovery, YamlDiscovery и другие.

Подробнее.

Plugin factory

Делится на два понятия:

1) Plugin factory method — метод плагин-менеджера, создающий экземпляр плагина (plugin instance) с помощью plugin factory class. Обычно это DefaultPluginManager::createInstance().

2) Plugin factory class — класс, создающий экземпляр плагина (plugin instance). Обычно это DefaultFactory или его производное, например ContainerFactory.

Plugin instance

Настроенный экземпляр плагина. Создаётся плагин-менеджером с помощью plugin factory.

Plugin derivative

Класс, унаследованный от DerivativeBase и возвращающий в методе DerivativeBase::getDerivativeDefinition() список plugin definitions.

В Plugin API принято правило — один класс, один плагин. Т.е. например один класс с плагином блока может создать только один блок. Plugin derivatives позволяет реализовывать одним классом сколь угодно много плагинов (например блоков). Подробнее. Пример создания нескольких блоков с помощью одного плагина и plugin derivative.

Plugin mapper

Сам не понял, что это. Используется только в модуле Content translation.

Написанное актуально для
Drupal 8
Похожие записи

Добавить комментарий