2014-10-10 90 views
0

我正在为API编写一个PHP包装器项目。在我的响应对象中,我喜欢将JSON块反序列化为对象。它不是一个symfony标准框架项目,只是一个带有symfony组件的PHP项目。有没有办法手动初始化JSM串行器?

在symfony项目我会简单地调用

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

,并用它做。但是,我的班级当然既不是ContainerAware,也没有对容器或服务的任何访问权限。我需要使用JMS序列化程序作为API我正在编写包装程序以使用JMS序列化程序(使用配置)。

有没有办法手动初始化JMS串行器(JMS\Serializer\Serializer)?

内JMS串行的services.xml中有如下定义:

<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串行器?

+0

所以你的项目只用s2的成分,而不是S2框架? – Cerad 2014-10-10 13:39:26

+0

是的,(我更新了问题) – 2014-10-10 13:42:07

+0

我怀疑这是一个痛苦的过程。如果你真的不能使用这个框架,那么就建立在Symfony \ Serializer组件之上。 – Cerad 2014-10-10 13:52:39

回答

相关问题