Entity Flashcards

1
Q
  1. Что такое entity?
A

Сущность (entity) это объект с набором свойств и методов. Например нода, у неё есть свойства title, status и методы save(), isPublished()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. Какие существуют глобальные типы entity? В чём их различия?
A

В друпале два вида сущностей - content entity и config entity.

Контент-сущности, это сущности, которые содержат user-generated контент, т.е. ноды, пользователи, комментарии, файлы и т.д. Контент-сущность можно из админки расширять полями и настраивать их отображение.
Конфиг-сущности, это сущности, которые можно описать в коде, например Views, форматы дат, настройки отображения полей, стили изображений. По простому это настройки сайта. Конфиг-сущности можно экспортировать/импортировать/деплоить.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
  1. Какие content entity существуют в Друпале по умолчанию?
A

node (Node) — также известна как «Тип материала». Предоставляется одноимённым модулем node. Это основная сущность в Drupal, которая, в установочных профилях отличных от минимального, включена по умолчанию. Она используется для создания содержимого на сайте: Страницы, Публикации, Новости, Отзывы и т.д. Это основная сущность для хранения и работы с содержимым из коробки.
user (User) — сущность «Пользователь» предоставляет хранилище данных для пользователей сайта. Как правило хранит, имя пользователя, логин, пароль, email и т.д.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

a. Что такое node, зачем она нужна и как пользоваться?
b. Что такое taxonomy, зачем она нужна и как пользоваться?
c. Что такое блоки, зачем они нужны и как ими пользоваться?
i. block и block_content - что это, в чём различия?

A

b. taxonomy - Предоставляется одноимённым модулем taxonomy. Таксономия используется для классификации содержимого сайта.
c. Блоки - это боксы содержимого, отображаемые в регионах.
block - плагины, создаются через код
block_content - контент, создается через админку

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. Что такое bundle (content type)? Как создать свой?
A

Подтип типа сущности, содержащий в себе дополнительный набор полей
Создать:
- через админку
- программно

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. Что такое field? Какие типы полей бывают?

a. Как добавить поле в entity type?

A
Field – поле содержащее дополнительную информацию, привязанную к конкретному экземпляру сущности
Типы
string
boolean
integer
decimal
language
timestamp
changed
datetime
uuid
email
entity_reference
map

hook_entity_base_field_info
hook_entity_bundle_field_info

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
  1. Что такое field_base, field_instance?
A

feld_base – это базовое поле

field_instance – это экземпляр типа поля с отдельными настройками, привязанный к конкретному типу сущности

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. Что такое entity display? Зачем они нужны, как создать свой?
A

Настройка(конфигурационная сущность), которая содержит параметры отображения для атрибутов сущности(какие поля каким образом отображать)

  • через админку (admin/structure/display-modes)
  • через yml файл
  • программно EntityViewMode::create()
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. Что такое field format? Как создать свой форматтер?
A

Field format – это представление содержимого поля для конечного пользователя.
Отвечает за формирования значений нашего поля на вывод, грубо говоря варианты/форматы вывода
Форматттер представляет из себя плагин, имплементирующий FormatterBase

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. Что такое entity form display? Зачем они нужны, как создать свой? Чем отличаются от entity display?
A

Настройка отображения формы редактирования сущности.

  • через админку (admin/structure/display-modes)
  • через yml файл
  • программно EntityFormMode::create()
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q
  1. Что такое field widget? Как создать свой?
A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q
  1. Как создать реакцию на создание сущности? Изменение/удаление?
A

hook_entity_insert
hook_entity_update
hook_entity_delete

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q
  1. Как создать свой тип сущности? Когда это следует делать?
A

Создавать свой тип сущности нужно когода ни один из существующих не удовлетворяет ваши потребности.
ContentEntityBase

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q
  1. Каким образом можно управлять доступом к сущности?

i. Что такое роли и пермишены? Как создать свои?

A

Управление доступом

  • в админке через роли и пермишены
  • через hook_entity_access ($entity, $account)

Создать свои роли и пермишены

  • через админку
  • через yml файлы
  • через create у классов Permission и Role
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q
  1. Как изменить свойства типа сущности?

a. Как заменить класc?

A

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’);
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q
  1. Валидаторы, зачем нужны? Как добавить валидатор к типу сущности?
    a. Из чего состоит?
    b. Как создать свой?
A

Валидатор - защита от некорректного ввода данных.
Состоит:
Ограничение: класс, который хранит в себе настройки ограничений
Валидатор: непосредственно проверяет валидность данных(соответствие ограничениям)
Хук: прицепляет ограничение к типу сущности (hook_entity_type_alter)