Plugin system overview
1. What the plugin is ?
https://druki.ru/wiki/8/plugins
Plugins are small pieces of functionality that are swappable. Plugins that perform similar functionality are of the same plugin type
The basic idea of plugins is to allow a particular module or subsystem of Drupal to provide functionality in an extensible, object-oriented way.
Drupal 8 plugins similar to Drupal 7 hooks
- @FieldType = hook_field_info()
- @FieldType = hook_field_schema()
- @FieldFormatter = hook_field_formatter_info()
- @FieldWidget = hook_field_widget_info()
Создание кастомного плагина
Плагины состоят из:
Аннотации - это то что в комментариях задается. По сути можно передать какие-то базовые данные о плагине без необходимости писать код и методы. Т.е. данные что у плагина всегда будут статичны внутри него и не будут меняться ни при каких обстоятельствах - можно выносить в аннотации, например: id плагина и его заголовок. Обязательно, как минимум, должен содержать id;
Интерфейс плагина - тут мы описываем какие методы плагин обязан описать у себя;
База плагина (Plugin Base) - абстрактный класс, который наследуется от интерфейса плагина и позволяет для методов задать значения по-умолчанию, тем самым сделав эти методы не обязательными для объявления, если поведения из базового хватает. Это очень востребовано для получения данных из аннотации, так как они получаются всегда одним путем, то их можно описать в базе плагина;
Менеджер плагина (это сервис) - это класс который описывает где искать наш плагин, и указывает что является интерфейсом плагина и аннотацией.
2.Compare plugins vs. services
Плагины реализуют различные модели поведения через общий интерфейс.
Например, подумайте о преобразованиях изображений. Обычные преобразования изображений-масштабирование, обрезка, обесцвечивание и т. д. Каждый тип преобразования действует одинаково на одни и те же данные - он принимает файл изображения, выполняет преобразование, а затем возвращает измененное изображение. Однако каждый эффект очень разный.
Сервисы предоставляют одинаковую функциональность и взаимозаменяемы, отличаясь только своей внутренней реализацией.
Например Кэш должен предоставлять методы get, set и expire. Пользователь просто ожидает кэш, и один должен быть в состоянии заменить другой без каких-либо функциональных различий. Внутренняя реализация этих методов и механизмы, которые она использует для этого, могут быть совершенно разными. В этом случае более подходящим будет использовать Сервисы.
Исключение
Если вы предоставляете пользовательский интерфейс, с помощью которого люди могут настроить или выбрать нужную им реализацию, вы должны использовать систему плагинов.
3. Explain Plugin Types, Plugin Discovery, Plugin Factory
Систему плагинов можно разделить на несколько фундаментальных элементов:
- Plugin Types — централизованное место, объявляющая как плагины данного типа будут обнаруживаться и использоваться.
- Plugin Discovery — процесс, который используется менеджером плагинов, для того чтобы найти плагины конкретного типа, объявленных во всех модулях. Плагины могут объявляться несколькими способами:
- Annotation: Данный плагины являются объектами, в комментариях класса которого находится аннотация, описывающая параметры для конкретного типа плагина. Это основной способ определения и поиска плагинов, как и самый распространенный для создания собственных типов.
- Хуки: Плагины, объявленные через хуки.
- YAML: Плагины, описанные в YAML файлах. Ядро Drupal использует данный способ для обнаружения ссылок local tasks (вкладки) и local action (кнопки действий на страницах). Данный способ очень полезен для тех типов плагинов, где используется один общий класс.
- Static: Плагины являются объектами, но регистрируются менеджером плагинов. Это полезно, если вы хотите запретить создание плагинов данного типа (используется статичный список плагинов в коде).
- Plugin Factory — отвечает за определенных плагинов для конкретного использования.
Core Plugins
field formatters, field widgets, views filters,
Plugin Discovery
1. Explain Core Discovery Types
2. How to implement custom Plugin Discovery component?
Annotations-based plugins
1. Anotations discovery mechanism vs. hook discovery
2. How to create custom annotation class?
Plugin Manager
1. How to implement custom Plugin Manager?
Plugin Derivatives, Discovery Decorators
1. Explain what the Plugun Derivatives is.
2. Explain what the Discovery Decorators is.