Я использую "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 для класса, свойства которого из родительских классов?