|
@@ -1,104 +0,0 @@
|
|
|
-Custom De-/Serialization Handlers
|
|
|
-=================================
|
|
|
-
|
|
|
-Introduction
|
|
|
-------------
|
|
|
-This allows you to change the way of how a specifc type is being de-/serialized.
|
|
|
-
|
|
|
-Any handler must implement either the ``SerializationHandlerInterface``, or
|
|
|
-``DeserializationHandlerInterface``, or both. This bundle already comes with
|
|
|
-some handlers which you find in the Serializer/Handler folder, and which you
|
|
|
-can use as a starting point.
|
|
|
-
|
|
|
-Custom handlers are normal services, and thus can have dependencies on any
|
|
|
-other service available in the dependency injection container.
|
|
|
-
|
|
|
-Configuration
|
|
|
--------------
|
|
|
-After you have written your handler, you can write a service definition. Such
|
|
|
-as the following:
|
|
|
-
|
|
|
-.. code-block :: xml
|
|
|
-
|
|
|
- <service id="acme_foo.serializer.my_handler"
|
|
|
- class="Acme\FooBundle\Serializer\MyHandler"
|
|
|
- public="false"
|
|
|
- />
|
|
|
-
|
|
|
-The Handler Factory
|
|
|
--------------------
|
|
|
-What is left to do is to publish our new handler to this bundle. So it gets
|
|
|
-picked up, and wired correctly. In order to do this, this bundle uses a
|
|
|
-configuration system similar to that of the SecurityBundle. Each handler needs
|
|
|
-a corresponding definition factory:
|
|
|
-
|
|
|
-.. code-block :: php
|
|
|
-
|
|
|
- <?php
|
|
|
-
|
|
|
- namespace Acme\FooBundle\DependencyInjection\Factory;
|
|
|
-
|
|
|
- use JMS\SerializerBundle\DependencyInjection\HandlerFactoryInterface;
|
|
|
-
|
|
|
- class MyHandlerFactory implements HandlerFactoryInterface
|
|
|
- {
|
|
|
- public function getConfigKey()
|
|
|
- {
|
|
|
- return 'acme_foo_my';
|
|
|
- }
|
|
|
-
|
|
|
- public function getType(array $config)
|
|
|
- {
|
|
|
- return self::TYPE_SERIALIZATION | self::TYPE_DESERIALIZATION;
|
|
|
- }
|
|
|
-
|
|
|
- public function addConfiguration(ArrayNodeDefinition $builder)
|
|
|
- {
|
|
|
- $builder
|
|
|
- ->children()
|
|
|
- ->scalarNode('foo')->end()
|
|
|
- ->scalarNode('bar')->end()
|
|
|
- ->end()
|
|
|
- ;
|
|
|
- }
|
|
|
-
|
|
|
- public function getHandlerId(ContainerBuilder $container, array $config)
|
|
|
- {
|
|
|
- return 'acme_foo.serializer.my_handler';
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-This factory is responsible for setting up the configuration for your handler
|
|
|
-in the ``addConfiguration`` method, and then process that configuration in the
|
|
|
-``getHandlerId`` method.
|
|
|
-
|
|
|
-The last thing left to do, is to add this factory to this bundle. This is
|
|
|
-done by adding a ``configureSerializerExtension`` to your bundle class:
|
|
|
-
|
|
|
-.. code-block :: php
|
|
|
-
|
|
|
- <?php
|
|
|
-
|
|
|
- namespace Acme\FooBundle;
|
|
|
-
|
|
|
- use Acme\FooBundle\DependencyInjection\Factory\FooFactory;
|
|
|
- use JMS\SerializerBundle\DependencyInjection\JMSSerializerExtension;
|
|
|
- use Symfony\Component\HttpKernel\Bundle\Bundle;
|
|
|
-
|
|
|
- class AcmeFooBundle extends Bundle
|
|
|
- {
|
|
|
- public function configureSerializerExtension(JMSSerializerExtension $ext)
|
|
|
- {
|
|
|
- $ext->addHandlerFactory(new FooFactory());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-Enabling Your Handler
|
|
|
----------------------
|
|
|
-
|
|
|
-TODO: Add example config
|
|
|
-
|
|
|
-.. tip ::
|
|
|
-
|
|
|
- The order in which the handlers are listed in the "handlers" section defines
|
|
|
- in which they are called while processing.
|