У меня есть очень большой объект с большим количеством числовых значений. Поскольку у большинства этих значений есть единица измерения, я создал аннотацию @Unit
, чтобы поместить это право в модель. Теперь я хочу сериализовать этот объект.
Предположим, что существует такая сущность:
class Entity {
/**
* @var string
*
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank()
*/
private $name;
/**
* @ORM\Column(type="smallint", nullable=true)
* @Unit("m")
*/
private $distance;
}
Вывод выглядит примерно так:
{
"name": "bla",
"distance": 1.20
}
Я хочу, чтобы это выглядело так:
{
"name": "bla",
"distance": {"value": 1.20, "unit": "m", "string": "1.20 m"}
}
Я пытался использовать собственный обработчик, но, насколько мне известно, нет возможности вызвать обработчик по умолчанию.
public function handler(JsonSerializationVisitor $visitor, $data, array $type, Context $context)
{
$result = $context->accept($data);
// result is empty
// i can add stuff here but not call the default handler
return $result;
}
Итак, как я могу расширить (не перезаписать) поведение по умолчанию?
РЕДАКТИРОВАТЬ: я также пробовал событие до и после сериализации, которое также не работает, потому что кажется, что сериализатор принимает тип перед вызовом обработчика.