Плагины

Плагины — небольшие кусочки бизнес-логики.

Тип плагина — плагины, выполняющие один и тот же функционал.

В Drupal 8 находится много плагинов, и типов плагинов по умолчанию. Например, "Блок" (@Block) - это тип плагина, а каждый уникальный объект, реализующий данный тип плагина и предоставляющий данные — плагин.

Плагины объявляются и используются в модулях. Разработчики также могут создавать свои собственные типы плагинов и использовать плагины для своих нужд.

Систему плагинов можно разделить на несколько фундаментальных элементов:

  1. Plugin Types — централизованное место, объявляющая как плагины данного типа будут обнаруживаться и использоваться.
  2. Plugin Discovery — процесс, который используется менеджером плагинов, для того чтобы найти плагины конкретного типа, объявленных во всех модулях. Плагины могут объявляться несколькими способами:
    • Annotation: Данный плагины являются объектами, в комментариях класса которого находится аннотация, описывающая параметры для конкретного типа плагина. Это основной способ определения и поиска плагинов, как и самый распространенный для создания собственных типов.
    • Хуки: Плагины, объявленные через хуки.
    • YAML: Плагины, описанные в YAML файлах. Ядро Drupal использует данный способ для обнаружения ссылок local tasks (вкладки) и local action (кнопки действий на страницах). Данный способ очень полезен для тех типов плагинов, где используется один общий класс.
    • Static: Плагины являются объектами, но регистрируются менеджером плагинов. Это полезно, если вы хотите запретить создание плагинов данного типа (используется статичный список плагинов в коде).
  3. Plugin Factory — отвечает за определенных плагинов для конкретного использования.

Плагины или сервисы?

Плагины и сервисы очень похожи друг на друга, и могут решать одну и ту же задачу, стоит различать, когда подойдет сервис, а когда плагин.

Плагины и сервисы с метками

Возьмем для примера менеджеры хлебных крошек, которые являются сервисами с меткой, а также тип плагина "Блок".

Фундаментальная задача у них схожая — дать разработчику возможность описать своё поведение в контексте задачи. Оба варианта описывают бизнес логику в PHP объекте, и их результат затем используется с определенной целью. Но у них есть одно принципиальное отличие — менеджер хлебных крошек никак не взаимодействует с пользователем. Он просто подготавливает данные для построения хлебных крошек, и участие пользователя не имеет значения и не влияет на результат его работы. Блок, с другой стороны, тоже генерирует какой-то результат, но имеет возможность дать пользователю повлиять на него. Типы плагинов "Блок" могут предоставлять пользовательский интерфейс с настройками, которые могут быть учтены плагином в дальнейшем. Например, у блоков меню, объявленных через плагины, вы можете выбирать максимальный уровень вложенности выводимого меню.

Используйте плагины, если у пользователя есть возможность (даже опциональная) влиять на работу, в остальных случаях, когда взаимодействие не требуется — используйте сервисы с метками.

Ссылки

🌱 Помогите нам сделать документацию лучше!

Вся документация Druki с отрытым исходным кодом. Нашли ошибку или неточность? Создайте pull request.

Редактировать текущий документ Обсудить улучшение

Или узнайте как контрибутить.

🤔 По-прежнему нужна помощь?

Не нашли ответа на свой вопрос? Попросите помощи у сообщества!

Задайте вопрос на GitHub Смотрите другие ресурсы сообщества