Avoid Doctrine\Listener::getSubscribedEvents() call on each page where doctrine is active
This commit is contained in:
parent
f3e31e613e
commit
d731443aa5
|
@ -464,18 +464,22 @@ class FOSElasticaExtension extends Extension
|
||||||
$listenerId = sprintf('fos_elastica.listener.%s.%s', $indexName, $typeName);
|
$listenerId = sprintf('fos_elastica.listener.%s.%s', $indexName, $typeName);
|
||||||
$listenerDef = new DefinitionDecorator($abstractListenerId);
|
$listenerDef = new DefinitionDecorator($abstractListenerId);
|
||||||
$listenerDef->replaceArgument(0, new Reference($objectPersisterId));
|
$listenerDef->replaceArgument(0, new Reference($objectPersisterId));
|
||||||
$listenerDef->replaceArgument(1, $this->getDoctrineEvents($typeConfig));
|
$listenerDef->replaceArgument(2, array(
|
||||||
$listenerDef->replaceArgument(3, array(
|
|
||||||
'identifier' => $typeConfig['identifier'],
|
'identifier' => $typeConfig['identifier'],
|
||||||
'indexName' => $indexName,
|
'indexName' => $indexName,
|
||||||
'typeName' => $typeName,
|
'typeName' => $typeName,
|
||||||
));
|
));
|
||||||
if ($typeConfig['listener']['logger']) {
|
if ($typeConfig['listener']['logger']) {
|
||||||
$listenerDef->replaceArgument(4, new Reference($typeConfig['listener']['logger']));
|
$listenerDef->replaceArgument(3, new Reference($typeConfig['listener']['logger']));
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($typeConfig['driver']) {
|
switch ($typeConfig['driver']) {
|
||||||
case 'orm': $listenerDef->addTag('doctrine.event_subscriber'); break;
|
case 'orm':
|
||||||
|
foreach ($this->getDoctrineEvents($typeConfig) as $event) {
|
||||||
|
$listenerDef->addTag('doctrine.event_listener', array('event' => $event));
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
case 'mongodb': $listenerDef->addTag('doctrine_mongodb.odm.event_subscriber'); break;
|
case 'mongodb': $listenerDef->addTag('doctrine_mongodb.odm.event_subscriber'); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
namespace FOS\ElasticaBundle\Doctrine;
|
namespace FOS\ElasticaBundle\Doctrine;
|
||||||
|
|
||||||
use Doctrine\Common\EventSubscriber;
|
|
||||||
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
|
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
|
||||||
use FOS\ElasticaBundle\Persister\ObjectPersisterInterface;
|
use FOS\ElasticaBundle\Persister\ObjectPersisterInterface;
|
||||||
use FOS\ElasticaBundle\Persister\ObjectPersister;
|
use FOS\ElasticaBundle\Persister\ObjectPersister;
|
||||||
|
@ -14,7 +13,7 @@ use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
|
||||||
* Automatically update ElasticSearch based on changes to the Doctrine source
|
* Automatically update ElasticSearch based on changes to the Doctrine source
|
||||||
* data. One listener is generated for each Doctrine entity / ElasticSearch type.
|
* data. One listener is generated for each Doctrine entity / ElasticSearch type.
|
||||||
*/
|
*/
|
||||||
class Listener implements EventSubscriber
|
class Listener
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Object persister
|
* Object persister
|
||||||
|
@ -23,13 +22,6 @@ class Listener implements EventSubscriber
|
||||||
*/
|
*/
|
||||||
protected $objectPersister;
|
protected $objectPersister;
|
||||||
|
|
||||||
/**
|
|
||||||
* List of subscribed events
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $events;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration for the listener
|
* Configuration for the listener
|
||||||
*
|
*
|
||||||
|
@ -74,14 +66,12 @@ class Listener implements EventSubscriber
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param ObjectPersisterInterface $objectPersister
|
* @param ObjectPersisterInterface $objectPersister
|
||||||
* @param array $events
|
|
||||||
* @param IndexableInterface $indexable
|
* @param IndexableInterface $indexable
|
||||||
* @param array $config
|
* @param array $config
|
||||||
* @param null $logger
|
* @param null $logger
|
||||||
*/
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
ObjectPersisterInterface $objectPersister,
|
ObjectPersisterInterface $objectPersister,
|
||||||
array $events,
|
|
||||||
IndexableInterface $indexable,
|
IndexableInterface $indexable,
|
||||||
array $config = array(),
|
array $config = array(),
|
||||||
$logger = null
|
$logger = null
|
||||||
|
@ -89,7 +79,6 @@ class Listener implements EventSubscriber
|
||||||
$this->config = array_merge(array(
|
$this->config = array_merge(array(
|
||||||
'identifier' => 'id',
|
'identifier' => 'id',
|
||||||
), $config);
|
), $config);
|
||||||
$this->events = $events;
|
|
||||||
$this->indexable = $indexable;
|
$this->indexable = $indexable;
|
||||||
$this->objectPersister = $objectPersister;
|
$this->objectPersister = $objectPersister;
|
||||||
$this->propertyAccessor = PropertyAccess::createPropertyAccessor();
|
$this->propertyAccessor = PropertyAccess::createPropertyAccessor();
|
||||||
|
@ -99,14 +88,6 @@ class Listener implements EventSubscriber
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @see Doctrine\Common\EventSubscriber::getSubscribedEvents()
|
|
||||||
*/
|
|
||||||
public function getSubscribedEvents()
|
|
||||||
{
|
|
||||||
return $this->events;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Looks for new objects that should be indexed.
|
* Looks for new objects that should be indexed.
|
||||||
*
|
*
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
|
|
||||||
<service id="fos_elastica.listener.prototype.orm" class="%fos_elastica.listener.prototype.orm.class%" public="false" abstract="true">
|
<service id="fos_elastica.listener.prototype.orm" class="%fos_elastica.listener.prototype.orm.class%" public="false" abstract="true">
|
||||||
<argument /> <!-- object persister -->
|
<argument /> <!-- object persister -->
|
||||||
<argument type="collection" /> <!-- events -->
|
|
||||||
<argument type="service" id="fos_elastica.indexable" />
|
<argument type="service" id="fos_elastica.indexable" />
|
||||||
<argument type="collection" /> <!-- configuration -->
|
<argument type="collection" /> <!-- configuration -->
|
||||||
<argument on-invalid="ignore" /> <!-- logger -->
|
<argument on-invalid="ignore" /> <!-- logger -->
|
||||||
|
|
|
@ -16,7 +16,7 @@ abstract class ListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
|
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
|
||||||
$indexable = $this->getMockIndexable('index', 'type', $entity, true);
|
$indexable = $this->getMockIndexable('index', 'type', $entity, true);
|
||||||
|
|
||||||
$listener = $this->createListener($persister, array(), $indexable, array('indexName' => 'index', 'typeName' => 'type'));
|
$listener = $this->createListener($persister, $indexable, array('indexName' => 'index', 'typeName' => 'type'));
|
||||||
$listener->postPersist($eventArgs);
|
$listener->postPersist($eventArgs);
|
||||||
|
|
||||||
$this->assertEquals($entity, current($listener->scheduledForInsertion));
|
$this->assertEquals($entity, current($listener->scheduledForInsertion));
|
||||||
|
@ -35,7 +35,7 @@ abstract class ListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
|
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
|
||||||
$indexable = $this->getMockIndexable('index', 'type', $entity, false);
|
$indexable = $this->getMockIndexable('index', 'type', $entity, false);
|
||||||
|
|
||||||
$listener = $this->createListener($persister, array(), $indexable, array('indexName' => 'index', 'typeName' => 'type'));
|
$listener = $this->createListener($persister, $indexable, array('indexName' => 'index', 'typeName' => 'type'));
|
||||||
$listener->postPersist($eventArgs);
|
$listener->postPersist($eventArgs);
|
||||||
|
|
||||||
$this->assertEmpty($listener->scheduledForInsertion);
|
$this->assertEmpty($listener->scheduledForInsertion);
|
||||||
|
@ -55,7 +55,7 @@ abstract class ListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
|
$eventArgs = $this->createLifecycleEventArgs($entity, $this->getMockObjectManager());
|
||||||
$indexable = $this->getMockIndexable('index', 'type', $entity, true);
|
$indexable = $this->getMockIndexable('index', 'type', $entity, true);
|
||||||
|
|
||||||
$listener = $this->createListener($persister, array(), $indexable, array('indexName' => 'index', 'typeName' => 'type'));
|
$listener = $this->createListener($persister, $indexable, array('indexName' => 'index', 'typeName' => 'type'));
|
||||||
$listener->postUpdate($eventArgs);
|
$listener->postUpdate($eventArgs);
|
||||||
|
|
||||||
$this->assertEquals($entity, current($listener->scheduledForUpdate));
|
$this->assertEquals($entity, current($listener->scheduledForUpdate));
|
||||||
|
@ -89,7 +89,7 @@ abstract class ListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
->with($entity, 'id')
|
->with($entity, 'id')
|
||||||
->will($this->returnValue($entity->getId()));
|
->will($this->returnValue($entity->getId()));
|
||||||
|
|
||||||
$listener = $this->createListener($persister, array(), $indexable, array('indexName' => 'index', 'typeName' => 'type'));
|
$listener = $this->createListener($persister, $indexable, array('indexName' => 'index', 'typeName' => 'type'));
|
||||||
$listener->postUpdate($eventArgs);
|
$listener->postUpdate($eventArgs);
|
||||||
|
|
||||||
$this->assertEmpty($listener->scheduledForUpdate);
|
$this->assertEmpty($listener->scheduledForUpdate);
|
||||||
|
@ -124,7 +124,7 @@ abstract class ListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
->with($entity, 'id')
|
->with($entity, 'id')
|
||||||
->will($this->returnValue($entity->getId()));
|
->will($this->returnValue($entity->getId()));
|
||||||
|
|
||||||
$listener = $this->createListener($persister, array(), $indexable, array('indexName' => 'index', 'typeName' => 'type'));
|
$listener = $this->createListener($persister, $indexable, array('indexName' => 'index', 'typeName' => 'type'));
|
||||||
$listener->preRemove($eventArgs);
|
$listener->preRemove($eventArgs);
|
||||||
|
|
||||||
$this->assertEquals($entity->getId(), current($listener->scheduledForDeletion));
|
$this->assertEquals($entity->getId(), current($listener->scheduledForDeletion));
|
||||||
|
@ -157,7 +157,7 @@ abstract class ListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
->with($entity, 'identifier')
|
->with($entity, 'identifier')
|
||||||
->will($this->returnValue($entity->getId()));
|
->will($this->returnValue($entity->getId()));
|
||||||
|
|
||||||
$listener = $this->createListener($persister, array(), $indexable, array('identifier' => 'identifier', 'indexName' => 'index', 'typeName' => 'type'));
|
$listener = $this->createListener($persister, $indexable, array('identifier' => 'identifier', 'indexName' => 'index', 'typeName' => 'type'));
|
||||||
$listener->preRemove($eventArgs);
|
$listener->preRemove($eventArgs);
|
||||||
|
|
||||||
$this->assertEquals($entity->identifier, current($listener->scheduledForDeletion));
|
$this->assertEquals($entity->identifier, current($listener->scheduledForDeletion));
|
||||||
|
|
Loading…
Reference in a new issue