AbstractBaseModel
Описание: Абстрактный базовый класс для всех моделей Предоставляет общую функциональность для моделей данных: валидацию, сериализацию, работу с атрибутами PHP 8.3. Реализует интерфейс BaseModel и предоставляет готовые методы для работы с данными API Kinopoisk.dev. Основные возможности:
- Автоматическая валидация на основе атрибутов Validation
- Сериализация/десериализация с поддержкой JSON
- Обработка конфиденциальных полей
- Безопасное извлечение данных из массивов
- Создание копий объектов с изменениями
С версии: 1.0.0
Версия: 1.0.0
Пример:
class Movie extends AbstractBaseModel {
#[Validation(required: true, minLength: 1, maxLength: 255)]
public string $title;
#[Validation(min: 1900, max: 2030)]
public int $year;
#[Sensitive(hideInJson: true)]
public string $apiKey;
public function __construct(string $title, int $year, string $apiKey) {
$this->title = $title;
$this->year = $year;
$this->apiKey = $apiKey;
}
}
$movie = Movie::fromArray(['title' => 'The Matrix', 'year' => 1999, 'apiKey' => 'secret']);
$movie->validate();
$json = $movie->toJson(); // apiKey не включен в JSONСм. также:
\KinopoiskDev\Models\BaseModel: Интерфейс базовой модели\KinopoiskDev\Attributes\Validation: Атрибут валидации\KinopoiskDev\Attributes\Sensitive: Атрибут конфиденциальных полей\KinopoiskDev\Services\ValidationService: Сервис валидации
fromJson()
Описание: Создает объект из JSON строки Десериализует JSON строку в объект модели. Парсит JSON, создает массив данных и использует fromArray для создания объекта.
Десериализует JSON строку в объект модели с обработкой ошибок парсинга и валидации данных.
Параметры:
$json(string): JSON строка с данными объекта
Возвращает: static Экземпляр модели с заполненными данными
Исключения:
ValidationException: При ошибках парсинга JSON или валидации данных\JsonException: При ошибках парсинга JSON
Пример:
$json = '{"title":"The Matrix","year":1999}';
$movie = Movie::fromJson($json);
echo $movie->title; // The MatrixfromArray()
Описание: Создает экземпляр модели из массива данных Фабричный метод для создания объекта модели из ассоциативного массива, полученного из API ответа. Должен обрабатывать маппинг полей API на свойства модели и выполнять базовую валидацию данных.
Создает экземпляр модели из массива данных с использованием рефлексии. Автоматически определяет параметры конструктора и передает соответствующие значения из массива данных. Поддерживает значения по умолчанию.
Возвращает: static Экземпляр модели с заполненными данными
Исключения:
\ReflectionException: При ошибках рефлексии\LogicException: При попытке создания абстрактного классаValidationException: При некорректных данных
Пример:
$data = ['title' => 'The Matrix', 'year' => 1999];
$movie = Movie::fromArray($data);
// Создается объект Movie с title='The Matrix' и year=1999getDataValue()
Описание: Безопасно извлекает значение из массива данных Универсальный метод для безопасного извлечения значений из массива с поддержкой значения по умолчанию при отсутствии ключа.
Параметры:
$key(string): Ключ для поиска в массиве$default(mixed): Значение по умолчанию при отсутствии ключа
Возвращает: mixed Значение из массива или значение по умолчанию
Пример:
$data = ['title' => 'The Matrix', 'year' => 1999];
$title = self::getDataValue($data, 'title', 'Unknown'); // 'The Matrix'
$rating = self::getDataValue($data, 'rating', 0); // 0getArrayValue()
Описание: Безопасно извлекает массив из данных Извлекает значение из массива данных и гарантирует, что результат будет массивом. Возвращает пустой массив, если ключ отсутствует или значение не является массивом.
Параметры:
$key(string): Ключ для поиска в массиве
Возвращает: array<mixed> Массив значений или пустой массив
Пример:
$data = ['genres' => ['action', 'sci-fi'], 'actors' => null];
$genres = self::getArrayValue($data, 'genres'); // ['action', 'sci-fi']
$actors = self::getArrayValue($data, 'actors'); // []getStringValue()
Описание: Безопасно извлекает строку из данных Извлекает строковое значение из массива данных с поддержкой значения по умолчанию. Возвращает null, если значение не является строкой.
Параметры:
$key(string): Ключ для поиска в массиве$default(string|null): Значение по умолчанию при отсутствии ключа
Возвращает: string|null Строковое значение или null
Пример:
$data = ['title' => 'The Matrix', 'year' => 1999];
$title = self::getStringValue($data, 'title'); // 'The Matrix'
$description = self::getStringValue($data, 'description'); // nullgetIntValue()
Описание: Безопасно извлекает целое число из данных Извлекает целочисленное значение из массива данных с поддержкой значения по умолчанию. Преобразует числовые строки в целые числа.
Параметры:
$key(string): Ключ для поиска в массиве$default(int|null): Значение по умолчанию при отсутствии ключа
Возвращает: int|null Целочисленное значение или null
Пример:
$data = ['year' => 1999, 'rating' => '8.7', 'votes' => null];
$year = self::getIntValue($data, 'year'); // 1999
$rating = self::getIntValue($data, 'rating'); // 8
$votes = self::getIntValue($data, 'votes'); // nullgetBoolValue()
Описание: Безопасно извлекает логическое значение из данных Извлекает логическое значение из массива данных с поддержкой значения по умолчанию. Возвращает null, если значение не является boolean.
Параметры:
$key(string): Ключ для поиска в массиве$default(bool|null): Значение по умолчанию при отсутствии ключа
Возвращает: bool|null Логическое значение или null
Пример:
$data = ['isActive' => true, 'isDeleted' => false, 'isPublished' => null];
$isActive = self::getBoolValue($data, 'isActive'); // true
$isDeleted = self::getBoolValue($data, 'isDeleted'); // false
$isPublished = self::getBoolValue($data, 'isPublished'); // nullwith()
Описание: Создает копию объекта с измененными свойствами Иммутабельный метод для создания нового экземпляра объекта с измененными значениями свойств. Полезен для создания вариаций объекта без изменения оригинала.
Возвращает: static Новый экземпляр с примененными изменениями
Исключения:
ValidationException: При ошибках валидации нового объекта
Пример:
$movie = new Movie('The Matrix', 1999);
// Создаем копию с измененным годом
$updatedMovie = $movie->with(['year' => 2000]);
echo $updatedMovie->title; // The Matrix
echo $updatedMovie->year; // 2000
echo $movie->year; // 1999 (оригинал не изменился)toArray()
Описание: Преобразует объект в массив Сериализует объект модели в ассоциативный массив для передачи в API или сохранения в базу данных. Поддерживает контроль включения null значений.
Преобразует объект в ассоциативный массив с поддержкой вложенных объектов, enum значений и конфиденциальных полей. Автоматически обрабатывает атрибуты ApiField для маппинга имен полей.
Параметры:
$includeNulls(bool): Включать ли null значения в результат (по умолчанию true)
Возвращает: array<string, mixed> Ассоциативный массив с данными объекта
Пример:
$movie = new Movie('The Matrix', 1999);
// С null значениями
$array = $movie->toArray(true);
// Результат: ['title' => 'The Matrix', 'year' => 1999, 'rating' => null]
// Без null значений
$array = $movie->toArray(false);
// Результат: ['title' => 'The Matrix', 'year' => 1999]getApiFieldName()
Описание: Определяет имя поля для API на основе атрибутов Извлекает имя поля для API из атрибута ApiField или возвращает оригинальное имя свойства, если атрибут не задан.
Параметры:
$property(ReflectionProperty): Свойство для анализа
Возвращает: string Имя поля для использования в API
processArrayValue()
Описание: Обрабатывает значения массива для сериализации Рекурсивно обрабатывает элементы массива, преобразуя объекты BaseModel в массивы и enum значения в их скалярные представления.
Параметры:
$value(array<mixed>): Массив для обработки$includeNulls(bool): Включать ли null значения в результат
Возвращает: array<mixed> Обработанный массив
validate()
Описание: Валидирует данные модели Проверяет корректность данных модели согласно бизнес-правилам и ограничениям. Может использовать атрибуты Validation для автоматической валидации свойств.
Валидирует объект с использованием ValidationService и атрибутов Validation. Проверяет все свойства объекта на соответствие заданным правилам валидации.
Возвращает: bool True если валидация прошла успешно
Исключения:
ValidationException: При ошибках валидации с детальным описанием проблем
Пример:
$movie = new Movie('', -1000); // Некорректные данные
try {
$movie->validate();
echo "Модель валидна";
} catch (ValidationException $e) {
foreach ($e->getErrors() as $field => $error) {
echo "{$field}: {$error}\n";
}
}getValidator()
Описание: Получает экземпляр валидатора Возвращает статический экземпляр ValidationService для переиспользования между объектами одного класса. Создает новый экземпляр при первом вызове.
Возвращает: ValidationService Экземпляр сервиса валидации
equals()
Описание: Сравнивает текущий объект с другим Выполняет глубокое сравнение объектов на основе их данных. Объекты считаются равными, если все их свойства имеют одинаковые значения.
Параметры:
$other(BaseModel): Объект для сравнения
Возвращает: bool True если объекты равны, false в противном случае
Пример:
$movie1 = new Movie('The Matrix', 1999);
$movie2 = new Movie('The Matrix', 1999);
$movie3 = new Movie('The Matrix', 2000);
$movie1->equals($movie2); // true
$movie1->equals($movie3); // falsegetHash()
Описание: Возвращает хэш объекта Генерирует SHA256 хэш на основе JSON представления объекта. Полезен для кэширования, сравнения версий объектов или создания уникальных идентификаторов.
Возвращает: string SHA256 хэш объекта
Пример:
$movie = new Movie('The Matrix', 1999);
$hash = $movie->getHash();
// Результат: строка из 64 символов (SHA256)toJson()
Описание: Возвращает JSON представление объекта Сериализует объект модели в JSON строку для передачи по сети или сохранения в файл. Поддерживает настройку флагов кодирования JSON.
Сериализует объект в JSON строку с автоматической фильтрацией конфиденциальных полей согласно атрибутам Sensitive.
Параметры:
$flags(int): Флаги для json_encode (по умолчанию JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE)
Возвращает: string JSON строка с данными объекта
Исключения:
ValidationException: При ошибке кодирования JSON
Пример:
$movie = new Movie('The Matrix', 1999);
$movie->apiKey = 'secret123';
$json = $movie->toJson();
// Результат: '{"title":"The Matrix","year":1999}' (apiKey исключен)filterSensitiveForJson()
Описание: Фильтрует конфиденциальные поля для JSON вывода Удаляет поля, помеченные атрибутом Sensitive с hideInJson=true, из массива данных перед JSON сериализацией.
Возвращает: array<string, mixed> Отфильтрованные данные без конфиденциальных полей
isEmpty()
Описание: Проверяет, является ли объект пустым Определяет, содержит ли объект какие-либо непустые данные. Исключает null значения, пустые строки и пустые массивы.
Возвращает: bool True если объект не содержит данных, false в противном случае
Пример:
$movie1 = new Movie('', 0);
$movie1->isEmpty(); // true
$movie2 = new Movie('The Matrix', 1999);
$movie2->isEmpty(); // falsegetFilledProperties()
Описание: Возвращает только заполненные свойства Возвращает ассоциативный массив, содержащий только свойства с непустыми значениями (исключая null, пустые строки и массивы).
Возвращает: array<string, mixed> Массив непустых свойств
Пример:
$movie = new Movie('The Matrix', 1999);
$movie->description = '';
$movie->tags = [];
$filled = $movie->getFilledProperties();
// Результат: ['title' => 'The Matrix', 'year' => 1999]