Есть ли способ инициализировать JSM Serializer вручную?

Я пишу проект оболочки PHP для API. В моем объекте ответа я люблю десериализовать блок JSON для объекта. Это не стандартный фреймворк Symfony, а проект PHP с компонентами Symfony.

В рамках проекта Symfony я бы просто позвонил

$serializer = $this->get('serializer');

и покончим с этим. Но, конечно, мой класс не является ContainerAware и не имеет никакого доступа к контейнеру или сервисам в целом. Мне нужно использовать JMS Serializer в качестве API, для которого я пишу оболочку, также используется JMS Serializer (с настройками).

Есть ли способ инициализировать сериализатор JMS (JMS\Serializer\Serializer) вручную?

В services.xml Сериализатора JMS есть следующее определение:

<service id="jms_serializer.serializer" class="%jms_serializer.serializer.class%" public="false">
<argument type="service" id="jms_serializer.metadata_factory" />
<argument type="service" id="jms_serializer.handler_registry" />
<argument type="service" id="jms_serializer.object_constructor" />
<argument type="collection" /><!-- Serialization Visitors -->
<argument type="collection" /><!-- Deserialization Visitors -->
<argument type="service" id="jms_serializer.event_dispatcher" />
</service>

...

<service id="jms_serializer.metadata_factory" class="%jms_serializer.metadata.metadata_factory.class%" public="false">
<argument type="service" id="jms_serializer.metadata.lazy_loading_driver" />
<argument>Metadata\ClassHierarchyMetadata</argument>
<argument />
<call method="setCache">
<argument type="service" id="jms_serializer.metadata.cache" on-invalid="ignore" />
</call>
</service>

...

<service id="jms_serializer.metadata.lazy_loading_driver" class="%jms_serializer.metadata.lazy_loading_driver.class%" public="false">
<argument type="service" id="service_container" />
<argument>jms_serializer.metadata_driver</argument>
</service>

...

Я мог бы инициализировать один объект за другим, но все равно застрял бы в точке, где находится контейнер службы (<argument type="service" id="service_container" />) необходимо.

Есть ли еще способ инициализировать JMS Serializer вручную?

0

Решение

Файл сервисов, который вы просматриваете, взят из JMSSerializerBundle, специфичной для платформы Symfony 2.

Сам пакет является лишь тонкой оболочкой для универсального кода пакета сериализатора JMS.

Документация пакета поможет вам: https://github.com/schmittjoh/serializer/tree/master/doc

Строительную часть можно найти здесь:
https://github.com/schmittjoh/serializer/blob/master/doc/configuration.rst

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]