Entity Flashcards
- Что такое entity?
Сущность (entity) это объект с набором свойств и методов. Например нода, у неё есть свойства title, status и методы save(), isPublished()
- Какие существуют глобальные типы entity? В чём их различия?
В друпале два вида сущностей - content entity и config entity.
Контент-сущности, это сущности, которые содержат user-generated контент, т.е. ноды, пользователи, комментарии, файлы и т.д. Контент-сущность можно из админки расширять полями и настраивать их отображение.
Конфиг-сущности, это сущности, которые можно описать в коде, например Views, форматы дат, настройки отображения полей, стили изображений. По простому это настройки сайта. Конфиг-сущности можно экспортировать/импортировать/деплоить.
- Какие content entity существуют в Друпале по умолчанию?
node (Node) — также известна как «Тип материала». Предоставляется одноимённым модулем node. Это основная сущность в Drupal, которая, в установочных профилях отличных от минимального, включена по умолчанию. Она используется для создания содержимого на сайте: Страницы, Публикации, Новости, Отзывы и т.д. Это основная сущность для хранения и работы с содержимым из коробки.
user (User) — сущность «Пользователь» предоставляет хранилище данных для пользователей сайта. Как правило хранит, имя пользователя, логин, пароль, email и т.д.
a. Что такое node, зачем она нужна и как пользоваться?
b. Что такое taxonomy, зачем она нужна и как пользоваться?
c. Что такое блоки, зачем они нужны и как ими пользоваться?
i. block и block_content - что это, в чём различия?
b. taxonomy - Предоставляется одноимённым модулем taxonomy. Таксономия используется для классификации содержимого сайта.
c. Блоки - это боксы содержимого, отображаемые в регионах.
block - плагины, создаются через код
block_content - контент, создается через админку
- Что такое bundle (content type)? Как создать свой?
Подтип типа сущности, содержащий в себе дополнительный набор полей
Создать:
- через админку
- программно
- Что такое field? Какие типы полей бывают?
a. Как добавить поле в entity type?
Field – поле содержащее дополнительную информацию, привязанную к конкретному экземпляру сущности Типы string boolean integer decimal language timestamp changed datetime uuid email entity_reference map
hook_entity_base_field_info
hook_entity_bundle_field_info
- Что такое field_base, field_instance?
feld_base – это базовое поле
field_instance – это экземпляр типа поля с отдельными настройками, привязанный к конкретному типу сущности
- Что такое entity display? Зачем они нужны, как создать свой?
Настройка(конфигурационная сущность), которая содержит параметры отображения для атрибутов сущности(какие поля каким образом отображать)
- через админку (admin/structure/display-modes)
- через yml файл
- программно EntityViewMode::create()
- Что такое field format? Как создать свой форматтер?
Field format – это представление содержимого поля для конечного пользователя.
Отвечает за формирования значений нашего поля на вывод, грубо говоря варианты/форматы вывода
Форматттер представляет из себя плагин, имплементирующий FormatterBase
- Что такое entity form display? Зачем они нужны, как создать свой? Чем отличаются от entity display?
Настройка отображения формы редактирования сущности.
- через админку (admin/structure/display-modes)
- через yml файл
- программно EntityFormMode::create()
- Что такое field widget? Как создать свой?
Widget – это визуальный интерфейс ввода дынных в поле.
Отвечает за то, как будет выглядеть форма ввода и редактирования поля, это форма с настройками для нашего поля, которое вы видите в административном интерфейсе сразу после добавления нового поля, а также при его редактировании.
Widget представляет из себя плагин, имплементирующий WidgetBase
- Как создать реакцию на создание сущности? Изменение/удаление?
hook_entity_insert
hook_entity_update
hook_entity_delete
- Как создать свой тип сущности? Когда это следует делать?
Создавать свой тип сущности нужно когода ни один из существующих не удовлетворяет ваши потребности.
ContentEntityBase
- Каким образом можно управлять доступом к сущности?
i. Что такое роли и пермишены? Как создать свои?
Управление доступом
- в админке через роли и пермишены
- через hook_entity_access ($entity, $account)
Создать свои роли и пермишены
- через админку
- через yml файлы
- через create у классов Permission и Role
- Как изменить свойства типа сущности?
a. Как заменить класc?
hook_entity_type_alter () {
$entity_types[‘user’]->setHandlerClass(‘access’, CustomAccessHandler::class);
}
+ написать класс хандлера
Как заменить класс?
my_module_entity_type_build () {
$entity_types[‘node’]->setClass(‘Drupal\my_module\Entity\MyNode’);
}
- Валидаторы, зачем нужны? Как добавить валидатор к типу сущности?
a. Из чего состоит?
b. Как создать свой?
Валидатор - защита от некорректного ввода данных.
Состоит:
Ограничение: класс, который хранит в себе настройки ограничений
Валидатор: непосредственно проверяет валидность данных(соответствие ограничениям)
Хук: прицепляет ограничение к типу сущности (hook_entity_type_alter)