Плагины

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

Помощь и обратная связь

Если вы обнаружили ошибку или хотите внести улучшения, и желаете внести изменения самостоятельно при помощи Pull Request
Если вы желаете предложить улучшение для этого документа

Обратиться за помощью

Если вы не нашли то что искали, воспользуйтесь поиском.

Если вам нужна помощь с чем-то конкретным, обратитесь к сообществу.