Я пишу проект оболочки PHP для API. Внутри моего объекта ответа мне нравится десериализовать блок JSON для объекта. Это не стандартный проект фреймворка symfony, а просто проект PHP с компонентами symfony.Есть ли способ инициализировать JSM Serializer вручную?
В рамках проекта симфони я бы просто позвонить
$serializer = $this->get('serializer');
и сделать с ней. Но, конечно, мой класс не является ни ContainerAware, ни каким-либо доступом к контейнеру или услугам в целом. Мне нужно использовать JMS Serializer в качестве API, я пишу обертку для использования JMS Serializer (с конфигурациями).
Есть ли способ инициализировать сериализатор JMS (JMS\Serializer\Serializer
) вручную?
В services.xml из JMS Serializer есть следующее определение:
<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>
...
Я мог бы инициализировать один объект за другим, но я бы все-таки застрял в точке, где служба Container (<argument type="service" id="service_container" />
) необходимо.
Есть ли способ инициализировать JMS Serializer вручную?
Так ваш проект используя только компоненты S2, а не рамки S2? – Cerad
Да, точно (я обновил вопрос) –
Я подозреваю, что это будет болезненный процесс в лучшем случае. Если вы действительно не можете использовать фреймворк, то создайте поверх компонента Symfony \ Serializer. – Cerad