From c5ee26099bbfe846a558f0357704ddbd8b62750c Mon Sep 17 00:00:00 2001 From: Lea Haensenberger Date: Thu, 10 Jan 2013 14:05:50 +0100 Subject: [PATCH] Adding support to pass a serializer to elastica --- DependencyInjection/Configuration.php | 10 ++++++++++ DependencyInjection/FOSElasticaExtension.php | 12 ++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 4482a4c..6f5c35c 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -34,6 +34,7 @@ class Configuration implements ConfigurationInterface ->scalarNode('default_client')->end() ->scalarNode('default_index')->end() ->scalarNode('default_manager')->defaultValue('orm')->end() + ->scalarNode('serializer_id')->end() ->end() ; @@ -205,6 +206,15 @@ class Configuration implements ConfigurationInterface ->prototype('array') ->treatNullLike(array()) ->children() + ->arrayNode('serializer') + ->addDefaultsIfNotSet() + ->children() + ->arrayNode('groups') + ->treatNullLike(array()) + ->prototype('scalar')->end() + ->end() + ->end() + ->end() ->scalarNode('index_analyzer')->end() ->scalarNode('search_analyzer')->end() ->arrayNode('persistence') diff --git a/DependencyInjection/FOSElasticaExtension.php b/DependencyInjection/FOSElasticaExtension.php index 0cb5c27..4cad42c 100644 --- a/DependencyInjection/FOSElasticaExtension.php +++ b/DependencyInjection/FOSElasticaExtension.php @@ -40,7 +40,7 @@ class FOSElasticaExtension extends Extension } $clientIdsByName = $this->loadClients($config['clients'], $container); - $indexIdsByName = $this->loadIndexes($config['indexes'], $container, $clientIdsByName, $config['default_client']); + $indexIdsByName = $this->loadIndexes($config['indexes'], $container, $clientIdsByName, $config['default_client'], $config['serializer_id']); $indexRefsByName = array_map(function($id) { return new Reference($id); }, $indexIdsByName); @@ -93,7 +93,7 @@ class FOSElasticaExtension extends Extension * @throws \InvalidArgumentException * @return array */ - protected function loadIndexes(array $indexes, ContainerBuilder $container, array $clientIdsByName, $defaultClientName) + protected function loadIndexes(array $indexes, ContainerBuilder $container, array $clientIdsByName, $defaultClientName, $serializerId) { $indexIds = array(); foreach ($indexes as $name => $index) { @@ -128,7 +128,7 @@ class FOSElasticaExtension extends Extension if (!empty($index['settings'])) { $this->indexConfigs[$name]['config']['settings'] = $index['settings']; } - $this->loadTypes(isset($index['types']) ? $index['types'] : array(), $container, $name, $indexId, $typePrototypeConfig); + $this->loadTypes(isset($index['types']) ? $index['types'] : array(), $container, $name, $indexId, $typePrototypeConfig, $serializerId); } return $indexIds; @@ -169,8 +169,9 @@ class FOSElasticaExtension extends Extension * @param $indexId * @param array $typePrototypeConfig */ - protected function loadTypes(array $types, ContainerBuilder $container, $indexName, $indexId, array $typePrototypeConfig) + protected function loadTypes(array $types, ContainerBuilder $container, $indexName, $indexId, array $typePrototypeConfig, $serializerId) { + $serializer = $serializerId ? new Reference($serializerId) : null; foreach ($types as $name => $type) { $type = self::deepArrayUnion($typePrototypeConfig, $type); $typeId = sprintf('%s.%s', $indexId, $name); @@ -178,6 +179,9 @@ class FOSElasticaExtension extends Extension $typeDef = new Definition('%fos_elastica.type.class%', $typeDefArgs); $typeDef->setFactoryService($indexId); $typeDef->setFactoryMethod('getType'); + if ($serializer) { + $typeDef->addMethodCall('setSerializer', array($serializer, $type['serializer']['groups'])); + } $container->setDefinition($typeId, $typeDef); if (isset($type['_source'])) { $this->indexConfigs[$indexName]['config']['mappings'][$name]['_source'] = $type['_source'];