Десериализовать несколько вложенных сущностей с Symfony 4 - PullRequest
0 голосов
/ 13 февраля 2019

Допустим, у меня есть этот XML

<?xml version="1.0" encoding="UTF-8"?>
<Order>
  <InvoiceNumber>201902130420</InvoiceNumber>
  <Products>
    <Product>
      <Name>DaVinci IQ</Name>
      <SKU>420342300</SKU>
    </Product>
    <Product>
      <Name>Mighty</Name>
      <SKU>420342305</SKU>
    </Product>
  </Products>
</Order>

и я хочу десериализовать данный XML в существующий объект "Order", содержащий набор Product-Entities со всеми подузлами вСвойство заказа $ products.

Когда я вызываю

$order = $this->serializer->deserialize($xmlContent, Order::class, 'xml');

, я получаю объект Order с параметрами из XML, и мое свойство $ products заполняется элементами массива.

Однако, хотя я хотел бы иметь набор Product [] - Entities в моем результирующем объекте Order, мое $ products-свойство заполняется плоским массивом, содержащим значения продукта.

Другими словами: я бы хотел, чтобы итоговый $ ордер выглядел так:

App\Model\Order {
  -InvoiceNumber: "201902130420"
  -products: array:2 [
    0 => App\Model\Product {
      -Name: DaVinci IQ
      -SKU: 420342300
    }
    1 => App\Model\Product {
      -Name: Mighty
      -SKU: 420342305
    }
  ]
}

Но вместо этого я получаю:

App\Model\Order {
  -InvoiceNumber: "201902130420"
  -products: array:2 [
    "Product" => array:2 [
      "Name" => "DaVinci IQ"
      "SKU" => "420342300"
    ]
    "Product" => array:2 [
      "Name" => "Mighty"
      "SKU" => "420342305"
    ]
  ]
}

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 13 февраля 2019

Есть ли в вашем сериализаторе загруженный ArrayDenormalizer?Если это так, он должен работать, если вы называете его так:

$order = $this->serializer->deserialize($xmlContent,'App\Model\Product[]', 'xml'); 

Обратите внимание на [] после имени класса.

Редактировать: указать путь к классу App \ Model \ Product,не видел этого раньше: -)

...