В 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
}
Есть также и другие методы, которые возможно переопределить для изменения логики работы.Оригинал статьи.
Комментариев нет:
Отправить комментарий