Всем привет.
Необходимо было отвалидировать данные из DTO и я написал Resolver, который отрабатывает до Controller и взаимодействует с Request. В нем я заинжектил Serializer (для загрузки Request данных в DTO) и Validator интерфейсы соответственно.
Далее мне нужно было DTO загрузить в Entity и при этом учесть вероятность того, что поля между ними могут отличаться.
Для этого написал EntityDtoLoader, своеобразную хурму, которая сверяет существующие set методы и в случае совпадений загружает свои:
protected function load($dto, $model)
{
$modelMethods = get_class_methods($model);
$dtoMethods = get_class_methods($dto);
foreach ($dtoMethods as $method) {
preg_match('/get(.*)/', $method, $name);
if (count($name)) {
$name = $name[1];
foreach ($modelMethods as $modelMethod) {
if ($modelMethod === 'set'.$name) {
$model->{'set'.$name}($dto->{'get'.$name}());
}
}
}
}
}
Минусы у этого решения очевидные.
В общем, лютая дичь.
Обычно люди загружают свою Entity модель из DTO данных ручками, пишут в сервисе "new User" и set'ают данные..
Зря я написал EntityDtoLoader?
Может надо использовать ModelMapper?
Или как лучше?
Можете поделиться вашим подходом? Может у кого есть подходящий репозиторий с примером реализации?
Спасибо