Рефакторинг
This commit is contained in:
parent
3f403ba077
commit
c2de3054b5
@ -29,8 +29,7 @@ class Data2DtoConverter
|
||||
// Трансформируем данные
|
||||
$this->processTransformers($property, $value);
|
||||
|
||||
// Если значение в $data = null, но поле не может его принять - пропустим
|
||||
if ($value === null && !$reflectionPropertyType->allowsNull()) {
|
||||
if ($this->checkNullRule($value, $reflectionPropertyType)) {
|
||||
continue;
|
||||
}
|
||||
// В данных лежит объект, то дальше его не заполняем. Только присваиваем. Например, entity, document
|
||||
@ -38,26 +37,10 @@ class Data2DtoConverter
|
||||
$property->setValue($object, $value);
|
||||
continue;
|
||||
}
|
||||
$attributedPropertyClass = null;
|
||||
$propertyName = $property->getName();
|
||||
$propertyExtractor = new PropertyExtractor($property->class, $propertyName);
|
||||
/** @var DTOMeta $dtoMeta */
|
||||
if ($dtoMeta = $propertyExtractor->fetch(DTOMeta::class)) {
|
||||
$attributedPropertyClass = $dtoMeta->class;
|
||||
}
|
||||
|
||||
// Если массив и есть атрибут с указанием класса, то также преобразуем структуру
|
||||
if ($propertyType === 'array' && $attributedPropertyClass) {
|
||||
// Если тип у ДТО - массив, а в значении не массив - пропустим
|
||||
if (!is_array($value)) {
|
||||
if (!$this->transformArray($value, $property)) {
|
||||
continue;
|
||||
}
|
||||
$tempValue = [];
|
||||
foreach ($value as $itemValue) {
|
||||
$tempValue[] = $this->convert($itemValue, $attributedPropertyClass);
|
||||
}
|
||||
$value = $tempValue;
|
||||
}
|
||||
|
||||
// Если это class, то рекурсивно заполняем дальше
|
||||
if (class_exists($propertyType)) {
|
||||
@ -115,4 +98,41 @@ class Data2DtoConverter
|
||||
$resolver = $storage->get($meta::TYPE);
|
||||
return $resolver->resolve($meta);
|
||||
}
|
||||
|
||||
/**
|
||||
* Если значение в $data = null, но поле не может его принять - пропустим
|
||||
*/
|
||||
private function checkNullRule($value, \ReflectionNamedType $reflectionPropertyType): bool
|
||||
{
|
||||
return $value === null && !$reflectionPropertyType->allowsNull();
|
||||
}
|
||||
|
||||
private function transformArray(&$value, \ReflectionProperty $property): bool
|
||||
{
|
||||
$attributedPropertyClass = null;
|
||||
$propertyName = $property->getName();
|
||||
$propertyExtractor = new PropertyExtractor($property->class, $propertyName);
|
||||
/** @var DTOMeta $dtoMeta */
|
||||
if ($dtoMeta = $propertyExtractor->fetch(DTOMeta::class)) {
|
||||
$attributedPropertyClass = $dtoMeta->class;
|
||||
}
|
||||
|
||||
/** @var \ReflectionNamedType $reflectionPropertyType */
|
||||
$reflectionPropertyType = $property->getType();
|
||||
$propertyType = $reflectionPropertyType->getName();
|
||||
|
||||
// Если массив и есть атрибут с указанием класса, то также преобразуем структуру
|
||||
if ($propertyType === 'array' && $attributedPropertyClass) {
|
||||
// Если тип у ДТО - массив, а в значении не массив - пропустим
|
||||
if (!is_array($value)) {
|
||||
return false;
|
||||
}
|
||||
$tempValue = [];
|
||||
foreach ($value as $itemValue) {
|
||||
$tempValue[] = $this->convert($itemValue, $attributedPropertyClass);
|
||||
}
|
||||
$value = $tempValue;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user