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');
+ }
+}