我正在为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串行器?
所以你的项目只用s2的成分,而不是S2框架? – Cerad 2014-10-10 13:39:26
是的,(我更新了问题) – 2014-10-10 13:42:07
我怀疑这是一个痛苦的过程。如果你真的不能使用这个框架,那么就建立在Symfony \ Serializer组件之上。 – Cerad 2014-10-10 13:52:39