Привожу упрощенный пример кода:
class PostsPage
{
/**
* @var MetaPost[]
* @Serializer\Groups({"import_post_page"})
*/
private $posts;
// ...
}
class MetaPost
{
/**
* @var Recommendation
* @Serializer\Groups({"import_post_page"})
*/
private $rec;
/**
* @var Post
* @Serializer\Groups({"import_post_page"})
*/
private $post;
// ...
}
// ...
// Для сокращения количества кода сеттеры и геттеры как и прочие свойства были убраны
Естественно, есть JSON, в котором всё соответствует этой структуре. Вопрос: можно ли сделать разворачивание этого JSON в полноценную структуру данных учитывая классы? Точнее, если можно, то как конкретно указать сериализатору на то, откуда в какой тип данных надо разворачивать. Если просто сделать по примеру из документации так:
$data = $serializer->deserialize($json, 'SomeNamespace\PostsPage', 'json');
То в
$data
будет инстанс класса
PostsPage
. Но вот в
$posts
у него будет просто многомерный массив, а не массив объектов типа
MetaPost
(собственно, я и не ждал чуда с чтением
@var
из аннотаций).
В официальной документации я не увидел особо указаний, как десериализовать иерархию объектов, а по поисковым запросам вылезает JMS Serializer, который-то я и так знаю как настроить, но мне интересно, как избавиться от лишней зависимости не первой свежести, учитывая, что у Symfony есть свой компонент, нацеленный на эти задачи.
UPD: У меня было подозрение, что можно использовать
коллбэки для свойств, но полностью описывать коллбэками все вложенные объекты во-первых непонятно как именно, во-вторых - как-то некрасиво.