有没有办法手动初始化JSM Serializer?

时间:2014-10-10 13:23:05

标签: php json symfony dependency-injection jms-serializer

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

在symfony项目中,我只需要调用

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

并完成它。但是,我的课程当然既不是ContainerAware,也不是任何一种容器或服务的访问权限。我需要使用JMS Serializer作为API我正在编写包装器以便使用JMS Serializer(带配置)。

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

在JMS Serializer的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 Serializer吗?

1 个答案:

答案 0 :(得分:1)

您正在查看的服务文件来自Symfony 2框架特定的JMSSerializerBundle。

bundle本身只是通用JMS序列化程序包代码的一个瘦包装。

包文档将帮助您:https://github.com/schmittjoh/serializer/tree/master/doc

施工部分可在此处找到: https://github.com/schmittjoh/serializer/blob/master/doc/configuration.rst