Open Source/plain-to-class/Использование/Коллекция

Коллекция

Если у вас есть массив объектов определённого класса, то вы должны указать для него атрибут ConvertArray, передав ему, в какой класс нужно привести элементы.

Также можно указать класс в PHP DOC, но тогда нужно написать полный путь к этому классу array<\DTO\ProductDTO>. Это делается для того, чтобы точно знать, какой экземпляр нужно создать, поскольку Reflection не предоставляет готовых функций для получения файла use. Помимо use, можно указать псевдоним, и его будет сложнее отследить. Пример:

class ProductDTO
{
public int $id;
public string $name;
}
class UserDTO
{
public int $id;
public string $email;
public string $balance;
}
class PurchaseDTO
{
#[ConvertArray(ProductDTO::class)]
public array $products;
/** @var UserDTO $user */
public UserDTO $user;
}
$data = [
'products' => [
['id' => 1, 'name' => 'phone'],
['id' => 2, 'name' => 'bread'],
],
'user' => ['id' => 1, 'email' => 'test@test.com', 'balance' => 10012.23],
];
$purchaseDTO = ClassTransformer::transform(PurchaseDTO::class, $data);
var_dump($purchaseDTO);
object(PurchaseDTO)[345]
public array 'products' =>
array (size=2)
0 =>
object(ProductDTO)[1558]
public int 'id' => int 1
public string 'name' => string 'phone' (length=5)
1 =>
object(ProductDTO)[1563]
public int 'id' => int 2
public string 'name' => string 'bread' (length=5)
public UserDTO 'user' =>
object(UserDTO)[1559]
public int 'id' => int 1
public string 'email' => string 'test@test.com' (length=13)
public float 'balance' => float 10012.23