Adding default callback for serialization if serialization is turned on

This commit is contained in:
Lea Haensenberger 2013-01-25 16:48:29 +01:00 committed by Lukas Kahwe Smith
commit a139d18b22
4 changed files with 39 additions and 15 deletions

View file

@ -35,12 +35,10 @@ class Configuration implements ConfigurationInterface
->scalarNode('default_index')->end()
->scalarNode('default_manager')->defaultValue('orm')->end()
->arrayNode('serializer')
->prototype('array')
->treatNullLike(array())
->children()
->scalarNode('callable_class')->end()
->scalarNode('id')->end()
->end()
->treatNullLike(array())
->children()
->scalarNode('callback')->defaultValue('foq_elastica.serializer.callback')->end()
->scalarNode('serializer')->defaultValue('serializer')->end()
->end()
->end()
->end()

View file

@ -40,7 +40,8 @@ class FOSElasticaExtension extends Extension
}
$clientIdsByName = $this->loadClients($config['clients'], $container);
$indexIdsByName = $this->loadIndexes($config['indexes'], $container, $clientIdsByName, $config['default_client'], $config['serializer']);
$serializerConfig = isset($config['serializer']) ? $config['serializer'] : null;
$indexIdsByName = $this->loadIndexes($config['indexes'], $container, $clientIdsByName, $config['default_client'], $serializerConfig);
$indexRefsByName = array_map(function($id) {
return new Reference($id);
}, $indexIdsByName);
@ -179,14 +180,12 @@ class FOSElasticaExtension extends Extension
$typeDef->setFactoryService($indexId);
$typeDef->setFactoryMethod('getType');
if ($serializerConfig) {
$serializerDefArgs = array(new Reference($serializerConfig['id']));
$serializerDef = clone $container->getDefinition($serializerConfig['callback']);
$serializerDef->addMethodCall('setSerializer', array(new Reference($serializerConfig['serializer'])));
if (isset($type['serializer']['groups'])) {
$serializerDefArgs[] = $type['serializer']['groups'];
$serializerDef->addMethodCall('setGroups', array($type['serializer']['groups']));
}
$serializerDef = new Definition("%{$serializerConfig['callable_class']}%", $serializerDefArgs);
$serializerId = sprintf('%s.%s.serializer', $indexId, $name);
$serializerId = sprintf('%s.%s.serializer.callback', $indexId, $name);
$container->setDefinition($serializerId, $serializerDef);
$typeDef->addMethodCall('setSerializer', array(array(new Reference($serializerId), 'serialize')));

View file

@ -14,6 +14,7 @@
<parameter key="fos_elastica.elastica_to_model_transformer.collection.class">FOS\ElasticaBundle\Transformer\ElasticaToModelTransformerCollection</parameter>
<parameter key="fos_elastica.provider_registry.class">FOS\ElasticaBundle\Provider\ProviderRegistry</parameter>
<parameter key="fos_elastica.property_accessor.class">Symfony\Component\PropertyAccess\PropertyAccessor</parameter>
<parameter key="foq_elastica.serializer.callback.class">FOQ\ElasticaBundle\Serializer\Callback</parameter>
</parameters>
<services>
@ -77,8 +78,9 @@
<tag name="knp_paginator.subscriber" />
</service>
<service id="fos_elastica.property_accessor" class="%fos_elastica.property_accessor.class%">
</service>
<service id="fos_elastica.property_accessor" class="%fos_elastica.property_accessor.class%" />
<service id="foq_elastica.serializer.callback" class="%foq_elastica.serializer.callback.class%" />
</services>
</container>

25
Serializer/Callback.php Normal file
View file

@ -0,0 +1,25 @@
<?php
namespace FOQ\ElasticaBundle\Serializer;
class Callback
{
protected $serializer;
protected $groups;
public function setSerializer($serializer){
$this->serializer = $serializer;
}
public function setGroups($groups){
$this->groups = $groups;
}
public function serialize($object)
{
$this->serializer->setGroups(null);
$this->serializer->setGroups($this->groups);
return $this->serializer->serialize($object, 'json');
}
}