Перейти к основному содержанию

Обзор системы плагинов Drupal 8

вс, 27.03.2022 - 20:59
KonKin
3 минуты

В этой статье я буду опираться на свой опыт изучения работы с плагинами Drupal 8 и выше. Мы разберем следующие вопросы, которые возникают перед тем как начать писать собственные модули:

 

  • Что такое плагины и почему, когда и где они используются?
  • Что нужно знать для старта?
  • Ссылки на документацию.
Эта статья будет полезна всем, кто будет писать новые модули Drupal 8 или переносить существующий код с Drupal 7 на Drupal 8. Это поможет разработчикам лучше понять, где плагины вписываются в архитектуру модуля Drupal, и поможет сопоставить ваши знания Drupal 7 об информационных хуках и функциях обратного вызова с плагинами Drupal 8.

Что такое плагин

Система плагинов Drupal 8 это набор рекомендаций и повторно используемых компонентов, позволяющие разработчикам внедрять эти компоненты в свой код и при необходимости, поддерживать управление через пользовательский интерфейс.

Плагины это отдельный класс, который выполняет операцию в контексте заданной области, как средство расширения функциональности.

Подобная система, позволяет определять все вещи определенного типа, а затем знать что с ними делать, вне зависимости от того, где Друпал их нашел.

Плагины ограничены по объему. Это означает, что каждый экземпляр класса делает что-то одно. Каждый блок содержит название и его содержание.

В седьмом Друпал мы использовали хуки, например:

function example_block_info();
function example_block_configure($delta = '');
function example_block_view($delta = '');
function example_block_save($delta = '', $edit = array());

В восьмом, все реализуется по принципу ООП, например:

namespace Drupal\example\Plugin\Block;

class MyBlock extends BlockBase {
  // Код расширяющий базовый функционал системного модуля  BlockBase...
}

Что нужно знать

  • стандарт PSR-4;
  • аннотации;
  • инъекции зависимости;
  • Drupal сервисы;
  • Symfony (опционально).

PSR-4

Стандарт автоматической загрузки. По сути это соглашение о наименовании. Определяет, каким образом называть файлы и в каких директориях располагать их, чтобы Друпал мог автоматически обнаружить. Размещение класса в соответствующем пространстве имен, указано в примере выше.

Аннотации

Способ работы с мета-данными, которые используются внутри блоков. Анализаторы кода могут читать комментарии, написанные определенным образом. В комментарии указываются имя, описание или другая важная информация, например:

/**
  * Provides a 'New forum topics' block.
  *
  * @block(
  *  id = "form_new_block",
  *  admin_label = @Translation("New forum topics."),
  *  category = @Translation("Lists (Views)")
  * )
*/

Инъекции зависимости

Концепция: встроить зависимость в объект. В ядре реализована логика всех необходимых служб, придумывать от себя не нужно. В коде своего модуля, в класс необходимо встроить класс из модуля ядра и управлять состоянием через эту зависимость.

Как используется

  • через конструктор;
  • через метод;
  • через свойство.

Какую задачу решает Инъекции зависимости?

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

Зависимость можно использовать в контроллере своего модуля из любой службы ядра. Посмотреть методы, которые можно унаследовать и добавить собственную обработку смотрим в документации "API Drupal".

Сервисы

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

Создаются внутри модуля в директории /src/. В сервисе объявляется адресное пространство, откуда взять файл, в котором есть класс. Таким образом, в любом файле, в любом коде мы можем вызвать сервис, вместо того, чтобы писать абсолютный путь к файлу.

Знать Symfony

Отдельно изучать фреймворк не обязательно. Однако, знания лишними не будут. Для разработки плагинов в Друпал, достаточно знать стандарт PSR-4.

Куда писать код в Drupal 8

Логику модуля реализуют в специальных частях системы, где это разрешено - в контроллерах. Контроллер это файл, который будет имплементирован в потоке выполнения модуля.

Фреймворк дает структуру и управляет потоком приложения. Позволяет писать кастомный код в контроллерах и вызывает его по мере необходимости. Тем самым, контроль над исполнением кода перехватывается системой. Это называется - Inversion of Control (инверсия управления). По простому: Друпал управляет кодом, а не разработчик.

Ссылки по теме

Ссылка: Описание
Coding standards Стандарты кодирования Drupal применяются к коду в Drupal и его вспомогательных модулях.
Drupal API Справочник по API для Drupal.

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

Ограниченный HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.