Сущность (англ. Entity) — это легковесный доменный объект, который имеет хранилище данных. Один PHP объект сущности представляет конкретную единицу данных. В качестве хранилища данных может использоваться как БД, так и файлы, а разработчики могут описывать новые типы хранилищ и источники данных.
У сущностей, как правило, есть свои репозитории (англ. repository). Репозиторий — это постоянный функционал, который позволяет управлять сущностями конкретного типа. Он позволяет загружать, сохранять, удалять и искать сущности в их непосредственном хранилище.
¶Сущности в Drupal
Сущности в Drupal используются для хранения данных. В качестве примера можно привести следующие сущности:
-
node
(Node) — также известна как «Тип материала». Предоставляется одноимённым модулемnode
. Это основная сущность в Drupal, которая, в установочных профилях отличных от минимального, включена по умолчанию. Она используется для создания содержимого на сайте: Страницы, Публикации, Новости, Отзывы и т.д. Это основная сущность для хранения и работы с содержимым из коробки. -
user
(User) — сущность «Пользователь» предоставляет хранилище данных для пользователей сайта. Как правило хранит, имя пользователя, логин, пароль, email и т.д. -
file
(File) — сущность «File», это пример очень минимальной и легковесной сущности. Данная сущность хранит информацию о физических файлах загруженных в Drupal, и используется для обращения и работы с ними. По умолчанию, для данной сущности не предоставляется никакого интерфейса.
А также множество других сущностей с различными назначениями и возможностями.
¶Типы сущностей в Drupal
Сущности в Drupal базируются на Plugin API. Их можно разделить на два основных подтипа:
-
Контент сущность (
ContentEntityType
): Сущности, которые хранят свои данные в базе данных. Отлично подходят для хранения больших объёмов данных. Каждая сущность имеет свою выделенную таблицу. -
Конфигурационная сущность (
ConfigEntityType
): Конфигурационные сущности используются для хранения небольшого объема данных. Они хранятся в YAML файлах и больше известны как «конфиги». Конфигурационные сущности можно деплоить, синхронизировать и они отслеживаются в системе контроля версий.
Это лишь две основные и готовые абстрактные реализации поставляемые ядром. Они должны покрывать 99% потребностей. Для оставшегося 1% и очень нетипичных кейсов, существует более низкоуровневая абстракция, которую и расширяют описанные два — EntityType
.
Вы можете описать совершенно новый подтип сущности, унаследовавшись от EntityType
. В таком случае, вам придётся полностью брать всё под свой контроль. В данном случае Drupal не выдвигает фактически никаких требований, и вы вольны делать что угодно. Где будут храниться данные — решать вам. Это отличная точка старта, если вы хотите что-то очень уникальное не вписывающееся в предоставленные готовые абстракции, и\или вы хотите хранить данные не в БД\YAML. Например, такие сущности могут выступать в качестве прокси для API.
¶См. также
- Plugin API — сущности, это пример очень гибкой реализации плагинов.
¶Ссылки
- Основы: Сущности контента и Поля, drupal.org.
- Сущности Drupal 8, Синица Сергей, drupal-coder.ru.