DevCraft Документации
РазработкиDevCraft Dev ToolsСправочникAbstracts

AbstractReflection v1.0.0

Базовый класс DTO: fromArray, toArray, toJson через ReflectionMapper.

Описание: Абстрактный базовый класс для DTO с public typed свойствами. Реализует ReflectionInterface. Гидратацию и сериализацию делегирует ReflectionMapper.

Namespace: Devcraft\Abstracts

Implements: ReflectionInterface

С версии: 1.0.0

См. также:

static fromArray(array $data): static

Описание: Создаёт экземпляр через new static() и гидратирует public-свойства через ReflectionMapper::hydrate().

Параметры:

  • $data (array): ассоциативный массив (например decoded JSON)

Исключения: ValidationException при ошибках обязательных путей.

toArray(): array

Описание: Экспорт инициализированных public non-static свойств. Вложенные AbstractReflection раскрываются рекурсивно.

toJson(): string

Описание: Pretty-printed JSON из toArray() с JSON_THROW_ON_ERROR, JSON_UNESCAPED_UNICODE, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_INVALID_UTF8_SUBSTITUTE.

Исключения: JsonException

static setLogger(LoggerInterface $logger): void

Описание: Переопределяет PSR-3 логгер, используемый при сбоях валидации (по умолчанию Analog\Logger).

static resetLogger(): void

Описание: Сбрасывает кастомный логгер (удобно в teardown тестов).

Пример:

use Devcraft\Abstracts\AbstractReflection;
use Devcraft\Attributes\ArrayOf;
use Devcraft\Attributes\Range;
use Devcraft\Attributes\Regex;

final class Address extends AbstractReflection
{
    public string $city;
}

final class Proxy extends AbstractReflection
{
    #[Regex('/^[0-9a-f-]{36}$/i')]
    public string $id;

    #[Range(min: 1, max: 65535)]
    public int $port;

    public Address $address;

    #[ArrayOf(Address::class)]
    public array $locations = [];
}

$proxy = Proxy::fromArray([
    'id' => '550e8400-e29b-41d4-a716-446655440000',
    'port' => '8080',
    'address' => ['city' => 'Berlin'],
    'locations' => [
        ['city' => 'Berlin'],
        ['city' => 'Paris'],
    ],
]);

$proxy->port;              // int 8080 (string coerced)
$proxy->address->city;     // 'Berlin'
$proxy->toArray();         // nested arrays
echo $proxy->toJson();     // pretty-printed JSON

На этой странице