Fix serializer
This commit is contained in:
parent
4e990e0cee
commit
ca6991d494
|
@ -5,7 +5,6 @@ namespace FOS\ElasticaBundle\DependencyInjection;
|
||||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||||
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
|
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
use Symfony\Component\DependencyInjection\Definition;
|
|
||||||
use Symfony\Component\DependencyInjection\DefinitionDecorator;
|
use Symfony\Component\DependencyInjection\DefinitionDecorator;
|
||||||
use Symfony\Component\DependencyInjection\Reference;
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
use Symfony\Component\Config\FileLocator;
|
use Symfony\Component\Config\FileLocator;
|
||||||
|
@ -35,8 +34,6 @@ class FOSElasticaExtension extends Extension
|
||||||
*/
|
*/
|
||||||
private $loadedDrivers = array();
|
private $loadedDrivers = array();
|
||||||
|
|
||||||
protected $serializerConfig = array();
|
|
||||||
|
|
||||||
public function load(array $configs, ContainerBuilder $container)
|
public function load(array $configs, ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
$configuration = $this->getConfiguration($configs, $container);
|
$configuration = $this->getConfiguration($configs, $container);
|
||||||
|
@ -63,7 +60,11 @@ class FOSElasticaExtension extends Extension
|
||||||
$config['default_index'] = reset($keys);
|
$config['default_index'] = reset($keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->serializerConfig = isset($config['serializer']) ? $config['serializer'] : null;
|
if (isset($config['serializer'])) {
|
||||||
|
$loader->load('serializer.xml');
|
||||||
|
|
||||||
|
$this->loadSerializer($config['serializer'], $container);
|
||||||
|
}
|
||||||
|
|
||||||
$this->loadClients($config['clients'], $container);
|
$this->loadClients($config['clients'], $container);
|
||||||
$container->setAlias('fos_elastica.client', sprintf('fos_elastica.client.%s', $config['default_client']));
|
$container->setAlias('fos_elastica.client', sprintf('fos_elastica.client.%s', $config['default_client']));
|
||||||
|
@ -253,27 +254,20 @@ class FOSElasticaExtension extends Extension
|
||||||
$indexableCallbacks[sprintf('%s/%s', $indexName, $name)] = $type['indexable_callback'];
|
$indexableCallbacks[sprintf('%s/%s', $indexName, $name)] = $type['indexable_callback'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if ($this->serializerConfig) {
|
if ($container->hasDefinition('fos_elastica.serializer_callback_prototype')) {
|
||||||
$callbackDef = new Definition($this->serializerConfig['callback_class']);
|
$typeSerializerId = sprintf('%s.serializer.callback', $typeId);
|
||||||
$callbackId = sprintf('%s.%s.serializer.callback', $indexId, $name);
|
$typeSerializerDef = new DefinitionDecorator('fos_elastica.serializer_callback_prototype');
|
||||||
|
|
||||||
$typeDef->addMethodCall('setSerializer', array(array(new Reference($callbackId), 'serialize')));
|
|
||||||
$callbackDef->addMethodCall('setSerializer', array(new Reference($this->serializerConfig['serializer'])));
|
|
||||||
if (isset($type['serializer']['groups'])) {
|
if (isset($type['serializer']['groups'])) {
|
||||||
$callbackDef->addMethodCall('setGroups', array($type['serializer']['groups']));
|
$typeSerializerDef->addMethodCall('setGroups', array($type['serializer']['groups']));
|
||||||
}
|
}
|
||||||
if (isset($type['serializer']['version'])) {
|
if (isset($type['serializer']['version'])) {
|
||||||
$callbackDef->addMethodCall('setVersion', array($type['serializer']['version']));
|
$typeSerializerDef->addMethodCall('setVersion', array($type['serializer']['version']));
|
||||||
}
|
|
||||||
$callbackClassImplementedInterfaces = class_implements($this->serializerConfig['callback_class']); // PHP < 5.4 friendly
|
|
||||||
if (isset($callbackClassImplementedInterfaces['Symfony\Component\DependencyInjection\ContainerAwareInterface'])) {
|
|
||||||
$callbackDef->addMethodCall('setContainer', array(new Reference('service_container')));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$container->setDefinition($callbackId, $callbackDef);
|
$typeDef->addMethodCall('setSerializer', array(array(new Reference($typeSerializerId), 'serialize')));
|
||||||
|
$container->setDefinition($typeSerializerId, $typeSerializerDef);
|
||||||
$typeDef->addMethodCall('setSerializer', array(array(new Reference($callbackId), 'serialize')));
|
}
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$indexable = $container->getDefinition('fos_elastica.indexable');
|
$indexable = $container->getDefinition('fos_elastica.indexable');
|
||||||
|
@ -358,7 +352,7 @@ class FOSElasticaExtension extends Extension
|
||||||
return $typeConfig['model_to_elastica_transformer']['service'];
|
return $typeConfig['model_to_elastica_transformer']['service'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$abstractId = $this->serializerConfig ?
|
$abstractId = $container->hasDefinition('fos_elastica.serializer_callback_prototype') ?
|
||||||
'fos_elastica.model_to_elastica_identifier_transformer' :
|
'fos_elastica.model_to_elastica_identifier_transformer' :
|
||||||
'fos_elastica.model_to_elastica_transformer';
|
'fos_elastica.model_to_elastica_transformer';
|
||||||
|
|
||||||
|
@ -391,7 +385,7 @@ class FOSElasticaExtension extends Extension
|
||||||
$typeConfig['model'],
|
$typeConfig['model'],
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($this->serializerConfig) {
|
if ($container->hasDefinition('fos_elastica.serializer_callback_prototype')) {
|
||||||
$abstractId = 'fos_elastica.object_serializer_persister';
|
$abstractId = 'fos_elastica.object_serializer_persister';
|
||||||
$callbackId = sprintf('%s.%s.serializer.callback', $this->indexConfigs[$indexName]['reference'], $typeName);
|
$callbackId = sprintf('%s.%s.serializer.callback', $this->indexConfigs[$indexName]['reference'], $typeName);
|
||||||
$arguments[] = array(new Reference($callbackId), 'serialize');
|
$arguments[] = array(new Reference($callbackId), 'serialize');
|
||||||
|
@ -588,6 +582,25 @@ class FOSElasticaExtension extends Extension
|
||||||
$this->loadedDrivers[] = $driver;
|
$this->loadedDrivers[] = $driver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads and configures the serializer prototype.
|
||||||
|
*
|
||||||
|
* @param array $config
|
||||||
|
* @param ContainerBuilder $container
|
||||||
|
*/
|
||||||
|
private function loadSerializer($config, ContainerBuilder $container)
|
||||||
|
{
|
||||||
|
$container->setAlias('fos_elastica.serializer', $config['serializer']);
|
||||||
|
|
||||||
|
$serializer = $container->getDefinition('fos_elastica.serializer_callback_prototype');
|
||||||
|
$serializer->setClass($config['callback_class']);
|
||||||
|
|
||||||
|
$callbackClassImplementedInterfaces = class_implements($config['callback_class']);
|
||||||
|
if (isset($callbackClassImplementedInterfaces['Symfony\Component\DependencyInjection\ContainerAwareInterface'])) {
|
||||||
|
$serializer->addMethodCall('setContainer', array(new Reference('service_container')));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a default manager alias for defined default manager or the first loaded driver.
|
* Creates a default manager alias for defined default manager or the first loaded driver.
|
||||||
*
|
*
|
||||||
|
|
14
Resources/config/serializer.xml
Normal file
14
Resources/config/serializer.xml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<container xmlns="http://symfony.com/schema/dic/services"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
|
||||||
|
|
||||||
|
<services>
|
||||||
|
<service id="fos_elastica.serializer_callback_prototype" public="false" abstract="true">
|
||||||
|
<call method="setSerializer">
|
||||||
|
<argument type="service" id="fos_elastica.serializer" />
|
||||||
|
</call>
|
||||||
|
</service>
|
||||||
|
</services>
|
||||||
|
</container>
|
|
@ -3,9 +3,11 @@
|
||||||
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
|
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
|
||||||
use FOS\ElasticaBundle\FOSElasticaBundle;
|
use FOS\ElasticaBundle\FOSElasticaBundle;
|
||||||
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
|
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
|
||||||
|
use JMS\SerializerBundle\JMSSerializerBundle;
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
new FrameworkBundle(),
|
new FrameworkBundle(),
|
||||||
new FOSElasticaBundle(),
|
new FOSElasticaBundle(),
|
||||||
new DoctrineBundle()
|
new DoctrineBundle(),
|
||||||
|
new JMSSerializerBundle(),
|
||||||
);
|
);
|
||||||
|
|
|
@ -13,6 +13,7 @@ fos_elastica:
|
||||||
clients:
|
clients:
|
||||||
default:
|
default:
|
||||||
url: http://localhost:9200
|
url: http://localhost:9200
|
||||||
|
serializer: ~
|
||||||
indexes:
|
indexes:
|
||||||
index:
|
index:
|
||||||
index_name: foselastica_test_%kernel.environment%
|
index_name: foselastica_test_%kernel.environment%
|
||||||
|
@ -25,6 +26,9 @@ fos_elastica:
|
||||||
model: FOS\ElasticaBundle\Tests\Functional\TypeObj
|
model: FOS\ElasticaBundle\Tests\Functional\TypeObj
|
||||||
listener:
|
listener:
|
||||||
is_indexable_callback: 'object.isIndexable() && !object.isntIndexable()'
|
is_indexable_callback: 'object.isIndexable() && !object.isntIndexable()'
|
||||||
|
serializer:
|
||||||
|
groups: ['search']
|
||||||
|
version: 1.1
|
||||||
type2:
|
type2:
|
||||||
properties:
|
properties:
|
||||||
field1: ~
|
field1: ~
|
||||||
|
|
|
@ -21,6 +21,7 @@ class ModelToElasticaIdentifierTransformer extends ModelToElasticaAutoTransforme
|
||||||
public function transform($object, array $fields)
|
public function transform($object, array $fields)
|
||||||
{
|
{
|
||||||
$identifier = $this->propertyAccessor->getValue($object, $this->options['identifier']);
|
$identifier = $this->propertyAccessor->getValue($object, $this->options['identifier']);
|
||||||
|
|
||||||
return new Document($identifier);
|
return new Document($identifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
"doctrine/orm": "~2.2",
|
"doctrine/orm": "~2.2",
|
||||||
"doctrine/doctrine-bundle": "~1.2@beta",
|
"doctrine/doctrine-bundle": "~1.2@beta",
|
||||||
"doctrine/mongodb-odm": "1.0.*@beta",
|
"doctrine/mongodb-odm": "1.0.*@beta",
|
||||||
|
"jms/serializer-bundle": "@stable",
|
||||||
"phpunit/phpunit": "~4.1",
|
"phpunit/phpunit": "~4.1",
|
||||||
"propel/propel1": "1.6.*",
|
"propel/propel1": "1.6.*",
|
||||||
"pagerfanta/pagerfanta": "1.0.*@dev",
|
"pagerfanta/pagerfanta": "1.0.*@dev",
|
||||||
|
|
Loading…
Reference in a new issue