1

API 用の PHP ラッパー プロジェクトを作成しています。応答オブジェクト内で、JSON ブロックをオブジェクトに逆シリアル化するのが好きです。これは symfony 標準フレームワーク プロジェクトではなく、symfony コンポーネントを含む PHP プロジェクトです。

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シリアライザーを手動で初期化する方法はまだありますか?

4

1 に答える 1

2

あなたが見ているサービスファイルは、Symfony 2 フレームワーク固有の JMSSerializerBundle からのものです。

バンドル自体は、汎用の JMS シリアライザー パッケージ コードに対するシン ラッパーにすぎません。

パッケージのドキュメントを参照してください: https://github.com/schmittjoh/serializer/tree/master/doc

構築部分はここにあります: https://github.com/schmittjoh/serializer/blob/master/doc/configuration.rst

于 2014-10-10T14:55:18.683 に答える