I'm writing a PHP wrapper project for an API. Within my response object, I like to deserialize a JSON block to an object. It is not a symfony standard framework project, just a PHP project with symfony components.
Within a symfony project I would simply call
$serializer = $this->get('serializer');
and be done with it. But of course my class is neither ContainerAware nor has any kind of access to a container or services in general. I need to use the JMS Serializer as the API I'm writing the wrapper for also used the JMS Serializer (with configurations).
Is there a way to initialize a JMS Serializer (JMS\Serializer\Serializer
) manually?
Within the services.xml of the JMS Serializer there is the following definition:
<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>
...
I could initialize one object after the other but I would still be stuck at the point where the Service Container (<argument type="service" id="service_container" />
) is required.
Is there still a way to initialize the JMS Serializer manually?