Вам пожалуйста и тоже спасибо, что потрудились выложить интересную работу.
Но не всегда такие линейные переливания из пустого в порожнее.
И, кстати, если переливания не линейные, т.е. нужно что-то преобразовать во время переливания массива в DTO, то, скорее всего, на эти преобразования нужно сделать отдельный объект (класс), чтобы соблюсти Single Responsibility Principle — data transformer.
Вы посмотрите повнимательней DTO-пакет, может быть там можно через dependency injection впрыснуть свой кастомный data transformer. Или пакет форкнуть и доработать под себя.
Если нет, я бы все равно порекомендовал подумать, как вынести трансформацию в отдельный объект и проводить ее до переливания из массива в DTO (или после?).
Суть такого рефакторинга — сделать так, чтобы интеллектуальный DTO занимался только проверкой типов и, естественно, переносом данных в себе (он же data transfer object по основному назначению).
Кстати, еще по вашей задаче:
PHP 7.4 Typed properties — уже день, как вышел, скоро на всех виртуальных хостингах будет, а на VPS вы сами можете поставить.
Еще вам в копилку, посмотреть, как у них устроено: https://packagist.org/packages/justinrainbow/json-schema
или такое: https://github.com/cweiske/jsonmapper
или такое: https://packagist.org/packages/mathielen/import-engine
Вам пожалуйста и тоже спасибо, что потрудились выложить интересную работу.
И, кстати, если переливания не линейные, т.е. нужно что-то преобразовать во время переливания массива в DTO, то, скорее всего, на эти преобразования нужно сделать отдельный объект (класс), чтобы соблюсти Single Responsibility Principle — data transformer.
Вы посмотрите повнимательней DTO-пакет, может быть там можно через dependency injection впрыснуть свой кастомный data transformer. Или пакет форкнуть и доработать под себя.
Если нет, я бы все равно порекомендовал подумать, как вынести трансформацию в отдельный объект и проводить ее до переливания из массива в DTO (или после?).
Суть такого рефакторинга — сделать так, чтобы интеллектуальный DTO занимался только проверкой типов и, естественно, переносом данных в себе (он же data transfer object по основному назначению).
Кстати, еще по вашей задаче:
Ну у топикстартера основная цель — автоматизация type checking. В этом пакете я ее не увидел.
Коллега правильно показывает направление.
Посмотрите https://github.com/spatie/data-transfer-object — конвертация массивов в DTO со строго типированными properties. Совмещенные с коллекциями https://github.com/tightenco/collect — получите готовый не-велосипед.
а также
Symfony Collections, Symfony Serializer