В Drupal 8 появляется новый тип сущности - сущность конфигурации. Кто работал с Drupal 7 тот знаком с понятиями сущностей. Drupal 8 предостовляет новую концепцию сущности конфигурации, которая схожа с CTools exportable(экспортированный) в Drupal 7. В Drupal 7 CTools exportables используется такими модулями как: Views, Panels, Page Manager, Context, что помогает безболезненно экспортировать конфигурацию для хранения в системах контроля версий кода, размещения проектов на различные уровни разработки проектов.z
Примеры сущностей конфигурации
В ядре D8 у нас уже есть сущности конфигурации: Views, cловари, категориии форм контактов, шаблоны электронных сообщений пользователя, различные настройки вывода, экземпляры классов, наборы закладок(shortcuts), пользовательские меню и стили изображений.
Различия от конфигурации контента
Сущности в понимании Drupal 7 были переименованны в сущности контента. Основные различия между сущностями конфигурации и контента - это место, где они сохраняются. Сущности конфигурации сохраняются системой управления конфигурацией в каталоги конфигурации, в файлы yaml, придерживаясь условий наименования файлов. В то время, как сущности контента сохраняются в базу данных. Модуля содержат файлы конфигураций, которые используются для значений по умолчанию. К примеру, в каталогах модулей views находится множество конфигурационных файлов, которые определяют значения по умолчанию. Данная возможность заменяет функционал модуля features, что облегчает миграцию конфигурации между различными экземплярами проектов. Далее идёт раздел статьи , где рассказывается о процессе миграции. Предлагаю вам на выбор просмотреть уже обработанный материал по этой теме, или прочитать на сайте оригинала статьи.
Определение собственной конфигурационной сущности
Определим, что новая сущность и модуль называются robot. Следовательно, PSR-0 необходимо придерживаться правил размещения и наименования. Внутри файла robot/lib/Drupal/robot/Plugin/Core/Entity/Robot.php объявим класс сущности конфигурации Robot.
Определим функциональные контроллеры: хранения, списка и формы.
Контроллер хранения
Унаследуем/расширим контроллер Drupal\Core\Config\Entity\ConfigStorageController, если нет особой необходимости, тогда, стандартной реализацией достаточно.
Контроллер списка
Это новая особенность в Drupal 8, которая определяет общую логику группирования вывода сущностей в виде списка, что-то схоже на CTools exportables. Логика работы частично схожа с модулем Views.
Для расширения функциональности унаследуйте Drupal\Core\Config\Entity\ConfigEntityListController
Обязательно необходимо реализовать данные методы: buildRow(), buildHeader() и getOperations().
Контроллер формы
Унаследуем Drupal\Core\Entity\EntityFormController реализуем метод form(), используя возможности FAPI. Форма используется пользователем для сохранения данных в сущность.
save() - это метод, где происходит обработка данных формы, происходит процесс формирования объекта сущности, сохранения.
Оригинал статьи.
Примеры сущностей конфигурации
В ядре D8 у нас уже есть сущности конфигурации: Views, cловари, категориии форм контактов, шаблоны электронных сообщений пользователя, различные настройки вывода, экземпляры классов, наборы закладок(shortcuts), пользовательские меню и стили изображений.
Различия от конфигурации контента
Сущности в понимании Drupal 7 были переименованны в сущности контента. Основные различия между сущностями конфигурации и контента - это место, где они сохраняются. Сущности конфигурации сохраняются системой управления конфигурацией в каталоги конфигурации, в файлы yaml, придерживаясь условий наименования файлов. В то время, как сущности контента сохраняются в базу данных. Модуля содержат файлы конфигураций, которые используются для значений по умолчанию. К примеру, в каталогах модулей views находится множество конфигурационных файлов, которые определяют значения по умолчанию. Данная возможность заменяет функционал модуля features, что облегчает миграцию конфигурации между различными экземплярами проектов. Далее идёт раздел статьи , где рассказывается о процессе миграции. Предлагаю вам на выбор просмотреть уже обработанный материал по этой теме, или прочитать на сайте оригинала статьи.
Определение собственной конфигурационной сущности
Определим, что новая сущность и модуль называются robot. Следовательно, PSR-0 необходимо придерживаться правил размещения и наименования. Внутри файла robot/lib/Drupal/robot/Plugin/Core/Entity/Robot.php объявим класс сущности конфигурации Robot.
/** * @file * Contains Drupal\robot\Plugin\Core\Entity\Robot. */ namespace Drupal\robot\Plugin\Core\Entity; use Drupal\Core\Config\Entity\ConfigEntityBase; use Drupal\Core\Annotation\Plugin; use Drupal\Core\Annotation\Translation; /** * Defines the robot entity. * * @Plugin( * id = "robot", * label = @Translation("Robot"), * module = "robot", * controller_class = "Drupal\robot\RobotStorageController", * list_controller_class = "Drupal\robot\RobotListController", * form_controller_class = { * "default" = "Drupal\robot\RobotFormController" * }, * uri_callback = "robot_uri", * config_prefix = "robot.robot", * entity_keys = { * "id" = "id", * "label" = "label", * "uuid" = "uuid" * } * ) */ class Robot extends ConfigEntityBase { // ....Definition of robot's properties... // e.g.: /** * The custom block type ID. * * @var string */ public $id; }
Определим функциональные контроллеры: хранения, списка и формы.
Контроллер хранения
Унаследуем/расширим контроллер Drupal\Core\Config\Entity\ConfigStorageController, если нет особой необходимости, тогда, стандартной реализацией достаточно.
Контроллер списка
Это новая особенность в Drupal 8, которая определяет общую логику группирования вывода сущностей в виде списка, что-то схоже на CTools exportables. Логика работы частично схожа с модулем Views.
Для расширения функциональности унаследуйте Drupal\Core\Config\Entity\ConfigEntityListController
Обязательно необходимо реализовать данные методы: buildRow(), buildHeader() и getOperations().
Контроллер формы
Унаследуем Drupal\Core\Entity\EntityFormController реализуем метод form(), используя возможности FAPI. Форма используется пользователем для сохранения данных в сущность.
save() - это метод, где происходит обработка данных формы, происходит процесс формирования объекта сущности, сохранения.
/** * Overrides Drupal\Core\Entity\EntityFormController::save(). */ public function save(array $form, array &$form_state) { $robot = $this->getEntity($form_state); $status = $robot->save(); // .. do other things with the updated/inserted entity }Есть также и другие методы, которые возможно переопределить для изменения логики работы.
Оригинал статьи.
Комментариев нет:
Отправить комментарий