Adding default callback for serialization if serialization is turned on
This commit is contained in:
parent
c99eee9c4b
commit
a139d18b22
4 changed files with 39 additions and 15 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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')));
|
||||
|
|
|
|||
|
|
@ -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
25
Serializer/Callback.php
Normal 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');
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue