Проинтегрировал виртуальное поле

Чтобы можно было заполнить дто, когда нет такого ключа в данных.
This commit is contained in:
Rinsvent 2021-08-15 22:46:41 +07:00
parent 2e689c826d
commit e479206af0
2 changed files with 21 additions and 0 deletions

View File

@ -0,0 +1,12 @@
<?php
namespace Rinsvent\Data2DTO\Attribute;
#[\Attribute]
class VirtualProperty
{
public function __construct(
/** @var string[] $tags */
public array $tags = ['default']
) {}
}

View File

@ -6,6 +6,7 @@ use Rinsvent\AttributeExtractor\ClassExtractor;
use Rinsvent\AttributeExtractor\PropertyExtractor; use Rinsvent\AttributeExtractor\PropertyExtractor;
use Rinsvent\Data2DTO\Attribute\DTOMeta; use Rinsvent\Data2DTO\Attribute\DTOMeta;
use Rinsvent\Data2DTO\Attribute\PropertyPath; use Rinsvent\Data2DTO\Attribute\PropertyPath;
use Rinsvent\Data2DTO\Attribute\VirtualProperty;
use Rinsvent\Data2DTO\Resolver\TransformerResolverStorage; use Rinsvent\Data2DTO\Resolver\TransformerResolverStorage;
use Rinsvent\Data2DTO\Transformer\Meta; use Rinsvent\Data2DTO\Transformer\Meta;
use Rinsvent\Data2DTO\Transformer\TransformerInterface; use Rinsvent\Data2DTO\Transformer\TransformerInterface;
@ -30,6 +31,14 @@ class Data2DtoConverter
$reflectionPropertyType = $property->getType(); $reflectionPropertyType = $property->getType();
$propertyType = $reflectionPropertyType->getName(); $propertyType = $reflectionPropertyType->getName();
// Для виртуальных полей добавляем пустой масиив, чтобы заполнить поля дто
$propertyExtractor = new PropertyExtractor($property->class, $property->getName());
if ($propertyExtractor->fetch(VirtualProperty::class)) {
if (!array_key_exists($property->getName(), $data)) {
$data[$property->getName()] = [];
}
}
if ($dataPath = $this->grabDataPath($property, $data, $tags)) { if ($dataPath = $this->grabDataPath($property, $data, $tags)) {
$value = $data[$dataPath]; $value = $data[$dataPath];
// Трансформируем данные // Трансформируем данные