Класс Entity является базовым классом для всех сущностей CRM-системы Ultralight CRM. Это родительский класс, от которого наследуются все типы сущностей в системе, обеспечивая единый интерфейс для работы с различными типами данных.
App\Models\EntityModel (Laravel Eloquent)Класс Entity предназначен для:
initialize(int $id, int $typeId, bool $dnCheckRights = false)Инициализирует экземпляр сущности с указанными параметрами.
Параметры:
$id — идентификатор экземпляра сущности$typeId — идентификатор типа сущности$dnCheckRights — флаг, указывающий, нужно ли проверять права доступа (необязательный, по умолчанию false)Пример использования:
// Инициализация сущности
$entity = new CrmUser();
$entity->initialize(1, 1);
getField(string $name)Получает значение поля сущности по его имени.
Параметры:
$name — имя поляВозвращает: Значение поля
Пример использования:
// Получение значения поля
$name = $entity->getField('name');
$email = $entity->getField('email');
setField(string $name, $value)Устанавливает значение поля сущности.
Параметры:
$name — имя поля$value — новое значение поляПример использования:
// Установка значения поля
$entity->setField('name', 'Иван Иванов');
$entity->setField('email', 'ivan@example.com');
// Сохранение изменений
$entity->save();
delete()Удаляет экземпляр сущности из базы данных.
Пример использования:
// Удаление сущности
$entity->delete();
save()Сохраняет изменения в экземпляре сущности.
Пример использования:
// Изменение и сохранение сущности
$entity->setField('name', 'Новое имя');
$entity->save();
Класс Entity содержит следующие свойства:
public $timestamps = false — отключает автоматическое управление полями created_at и updated_atpublic int $accessRight = 2 — уровень прав доступа (2 — доступ запрещен по умолчанию)protected $table = null — имя таблицы (устанавливается в наследниках)private int $typeID = 0 — идентификатор типа сущностиprivate int $entityId = 0 — идентификатор экземпляра сущностиprivate array $fieldsInfo = [] — информация о полях сущностиКласс Entity служит основой для всех сущностей системы. Все конкретные сущности наследуют от него:
// Пример наследования
class CrmUser extends Entity {
protected $table = 'crm_user';
}
class CrmGroup extends Entity {
protected $table = 'crm_group';
}
Класс использует trait EntityTrait, который предоставляет дополнительную функциональность:
initialize, getField, setField, delete, saveuse App\Traits\EntityTrait;
class Entity extends Model {
use EntityTrait;
}
public $timestamps = false;
Свойство timestamps отключено, так как система использует собственную логику управления временем создания и обновления сущностей.
При создании экземпляра сущности необходимо вызвать метод initialize():
$entity = new CrmUser();
$entity->initialize($id, $typeId);
Это позволяет:
Для доступа к полям сущности используются методы getField() и setField() вместо прямого доступа к свойствам:
// Правильно
$name = $entity->getField('name');
$entity->setField('name', 'Новое имя');
// Неправильно (может не сработать)
$name = $entity->name;
$entity->name = 'Новое имя';
Система проверяет права доступа при попытке чтения/записи данных:
$accessRightCrmAuthorization::getAccess()// Создание новой сущности через EntityTable
$entity = EntityTable::createEntity(1, [
'name' => 'Иван Иванов',
'email' => 'ivan@example.com',
'password' => bcrypt('secret')
]);
// Инициализация сущности
$user = new CrmUser();
$user->initialize($entity->entityId, 1);
// Получение сущности через EntityTable
$entities = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 1,
'FILTER' => [['id', '=', 1]]
]);
if (!empty($entities)) {
$user = $entities[0];
// Работа с полями
echo $user->getField('name');
echo $user->getField('email');
}
// Обновление полей сущности
$user->setField('name', 'Новое имя');
$user->setField('email', 'newemail@example.com');
// Сохранение изменений
$user->save();
// Удаление сущности
$user->delete();
Система реализует проверку прав на нескольких уровнях:
getField, setField, save, delete| Уровень | Описание |
|---|---|
| 0 | Полный доступ (чтение и запись) |
| 1 | Только чтение |
| 2 | Доступ запрещен |
initialize() после создания экземпляраgetField() и setField()$typeID, $entityId, $fieldsInfo$table в наследникахКласс Entity является фундаментальным компонентом архитектуры Ultralight CRM. Он обеспечивает единый интерфейс для работы со всеми типами сущностей, реализует базовую функциональность и интегрируется с системой управления правами доступа. Благодаря своей простой, но эффективной архитектуре, класс позволяет легко расширять систему новыми типами сущностей, сохраняя при этом единый подход к их обработке и безопасности.