Какую из? :) Покажите, что выдается если использовать стандартный сериалайзер?
1 is not a valid backing value for enum "App\Enum\StatusEnum
/app/vendor/symfony/serializer/Exception/NotNormalizableValueException.php
return $this->serializer->deserialize(
$result,
ResponseSuccessPayment::class,
'json',
[
AbstractNormalizer::CALLBACKS => [
'status' => function ($status) {
return match ($status) {
0 => StatusEnum::TRANSACTION_STATUS_SUCCESS,
1 => StatusEnum::TRANSACTION_STATUS_IN_PROCESS,
2 => StatusEnum::TRANSACTION_STATUS_FAIL,
default => null,
};
}
],
AbstractObjectNormalizer::DISABLE_TYPE_ENFORCEMENT => true
]
);
Ваш StatusEnum точно BackedEnum?
Брехня
1 is not a valid backing value for enum "App\Enum\StatusEnum
/app/vendor/symfony/serializer/Exception/NotNormalizableValueException.php
$normalizers = [
new BackedEnumNormalizer(),
new ObjectNormalizer(),
new ArrayDenormalizer(),
];
$this->serializer = new Serializer($normalizers, [new JsonEncoder()]);
Этот код что делает? Просто матчит, типа если в json пришло 0 то одно значение запихать в объект, если 1 то другое и так далее, верно? По сути что этот код выполнится тут, что в колбеке вообще не должно влиять. Или я чего-то не понимаю?
Так или иначе я попробовал сделать. Связал через аннотации нормализатор с полем которое оно должен обрабатывать (кстати кроме аннотаций есть другой способ или я делаю верно?), запустил это дело и дамплю
В object выводит
Это просто значение по умолчанию у свойства класса ResponseSuccessPayment, которое я для теста установил. В общем я видимо вообще концепцию не так понимаю. Я думал тут в $object будут данные из json, которые я буду матчить на статусы и потом эти статусы возвращать и таким образом типа вот нормализация происходит - сматчил - вернул - записал в объект. А тут какая-то совсем другая кухня.
Видимо тут нужно вообще не все эти нормализаторы использовать и стерилизаторы а просто создать какой-то класс Таппер и в ручную мапить. А так получается ерунда, если честно пока)