stanislav-belichenko
@stanislav-belichenko
Backend PHP Developer

Есть ли готовые компоненты для Symfony (но можно и без привязки к нему), способные делать то, что делает Doctrine через рефлексию?

Задача такова: есть некий набор данных, получаемых не из БД, на основании которого хочется уметь достаточно просто, например на основании xml-конфига (yaml, php - не особо важно), уметь создавать новые сущности неких классов уровня модели. Например, мы получили по API ответ от некоего сервиса, содержащий поля и их значения некоего объекта "Документ", и после на основании некоего конфига мы создаем новый инстанс класса Document, с заполненными свойствами нужными нам значениями. Свойства приватные. Понятно, что это делается на основании рефлексии, но хочется получить некую готовую разработку. Создавать через конструктор не вариант по своим причинам.

Есть что-то подобное, или придется все-таки писать самим?
  • Вопрос задан
  • 197 просмотров
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Прямой ответ на вопрос:

1. Symfony Normalizer в составе Symfony Serializer
https://symfony.com/doc/current/serializer/normali...
А именно PropertyNormalizer:
Symfony includes the following normalizers:
...
PropertyNormalizer to normalize PHP object using PHP reflection.


2. Zend Hydrator
Дока: https://docs.zendframework.com/zend-hydrator/
Код: https://github.com/zendframework/zend-hydrator

Именно как Доктрина через рекфлексию, то это ReflectionHydrator
Но в пакете есть и ряд других, не через рефлексию

Например свежая Cycle ORM юзает именно этот пакет

..................................

получили по API ответ от некоего сервиса, содержащий поля и их значения некоего объекта "Документ", и после на основании некоего конфига мы создаем новый инстанс класса Document, с заполненными свойствами нужными нам значениями. Свойства приватные
Создавать через конструктор не вариант по своим причинам.

А вот если прислушаться к вашей задаче, то что мешает создавать через фабричный метод (именованный конструктор)?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы