2014-10-10 6 views
0

Я пишу проект оболочки 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 вручную?

+0

Так ваш проект используя только компоненты S2, а не рамки S2? – Cerad

+0

Да, точно (я обновил вопрос) –

+0

Я подозреваю, что это будет болезненный процесс в лучшем случае. Если вы действительно не можете использовать фреймворк, то создайте поверх компонента Symfony \ Serializer. – Cerad

ответ

1

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

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

Документация пакета получит вы собираетесь: https://github.com/schmittjoh/serializer/tree/master/doc

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