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