diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 7e0af16..f23f3a8 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -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() diff --git a/DependencyInjection/FOSElasticaExtension.php b/DependencyInjection/FOSElasticaExtension.php index 1469510..1c2cbe0 100644 --- a/DependencyInjection/FOSElasticaExtension.php +++ b/DependencyInjection/FOSElasticaExtension.php @@ -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'))); diff --git a/Resources/config/config.xml b/Resources/config/config.xml index bf9d40d..f073aeb 100644 --- a/Resources/config/config.xml +++ b/Resources/config/config.xml @@ -14,6 +14,7 @@ FOS\ElasticaBundle\Transformer\ElasticaToModelTransformerCollection FOS\ElasticaBundle\Provider\ProviderRegistry Symfony\Component\PropertyAccess\PropertyAccessor + FOQ\ElasticaBundle\Serializer\Callback @@ -77,8 +78,9 @@ - - + + + diff --git a/Serializer/Callback.php b/Serializer/Callback.php new file mode 100644 index 0000000..576004a --- /dev/null +++ b/Serializer/Callback.php @@ -0,0 +1,25 @@ +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'); + } +}