Класс десериализации Jms с родительскими свойствами - PullRequest
0 голосов
/ 30 октября 2019

Я использую "jms/serializer": "^3.3", в одиночку. И моя цель создать родительский класс для двух детей с общими свойствами. Я это сделал. Крит родительский класс Request и два дочерних - ApiRequest и FormRequest. Дочерние отличаются тем, что они имеют разные имена сериализатора для свойств, вот и все. Я использую сопоставление yml.

/**
 * Class Request
 */

class Request
{
/**
 * @var SignatureType
 * @Assert\NotBlank()
 */
public $signatureType;

Дочерний

/**
 * Class ApiRequest
 * @package CDB\Collection\DTO
 * @RequestApplication()
 * @SignatoryTypeConstraint()
 */
class ApiRequest extends Request
{

}

и дочерний конфиг CDB.Collection.DTO.ApiRequest.yml

CDB\Collection\DTO\ApiRequest:
  exclusion_policy: ALL
  properties:
    signatureType:
      expose: true
      type: string
      serialized_name: signatureType

Для родителей у меня нет конфигурации

и когдаЯ пытаюсь десериализовать json

{

    "signatureType": "bankid"
}

Объект имеет пустое свойство

Когда я пытаюсь десериализировать json

{

    "signature_type": "bankid"
}

Я определил, что метаданные для дочернего класса не содержат propertyMetadata. When I remove condtiion in jms / serializer / src / Metadata / Driver / YamlDriver.php` от

            foreach ($class->getProperties() as $property) {
                if ($property->class !== $name || (isset($property->info) && $property->info['class'] !== $name)) {
                    continue;
                }

до

            foreach ($class->getProperties() as $property) {
                if ((isset($property->info) && $property->info['class'] !== $name) {
                    continue;
                }

$metadata для моего класса метаданные стали содержать данные о моем дочернем классе. Поскольку $class->getProperties() функция отражения, которая получает свойства от parent, поэтому имя класса свойства и класс, для которого генерируются метаданные, различаются. Может быть, я выбрал неправильный путь или кто знает, как исправить работу с конфигурацией yml для класса, свойства которого из родительских классов?

...