Added getDoctrineObject method to retrieve an entity or document from a LifecycleEventArgs instance in the unified Listener class

This commit is contained in:
Josh Worden 2014-04-04 10:47:50 -05:00
parent 1628413e65
commit b6e2583455

View file

@ -179,6 +179,34 @@ class Listener implements EventSubscriber
return strtolower($ref->getShortName()); return strtolower($ref->getShortName());
} }
/**
* Provides unified method for retrieving a doctrine object from an EventArgs instance
*
* @param EventArgs $eventArgs
* @return object Entity | Document
* @throws \RuntimeException if no valid getter is found.
*/
private function getDoctrineObject(EventArgs $eventArgs)
{
if (method_exists($eventArgs, 'getObject')) {
return $eventArgs->getObject();
} elseif (method_exists($eventArgs, 'getEntity')) {
return $eventArgs->getEntity();
} elseif (method_exists($eventArgs, 'getDocument')) {
return $eventArgs->getDocument();
}
throw new \RuntimeException('Unable to retrieve object from EventArgs.');
}
/** /**
* @return bool|ExpressionLanguage * @return bool|ExpressionLanguage
*/ */
@ -197,7 +225,7 @@ class Listener implements EventSubscriber
public function postPersist(EventArgs $eventArgs) public function postPersist(EventArgs $eventArgs)
{ {
$entity = (method_exists($eventArgs, 'getEntity')) ? $eventArgs->getEntity() : $eventArgs->getDocument(); $entity = $this->getDoctrineObject($eventArgs);
if ($entity instanceof $this->objectClass && $this->isObjectIndexable($entity)) { if ($entity instanceof $this->objectClass && $this->isObjectIndexable($entity)) {
$this->scheduledForInsertion[] = $entity; $this->scheduledForInsertion[] = $entity;
@ -206,7 +234,7 @@ class Listener implements EventSubscriber
public function postUpdate(EventArgs $eventArgs) public function postUpdate(EventArgs $eventArgs)
{ {
$entity = (method_exists($eventArgs, 'getEntity')) ? $eventArgs->getEntity() : $eventArgs->getDocument(); $entity = $this->getDoctrineObject($eventArgs);
if ($entity instanceof $this->objectClass) { if ($entity instanceof $this->objectClass) {
if ($this->isObjectIndexable($entity)) { if ($this->isObjectIndexable($entity)) {
@ -224,7 +252,7 @@ class Listener implements EventSubscriber
*/ */
public function preRemove(EventArgs $eventArgs) public function preRemove(EventArgs $eventArgs)
{ {
$entity = (method_exists($eventArgs, 'getEntity')) ? $eventArgs->getEntity() : $eventArgs->getDocument(); $entity = $this->getDoctrineObject($eventArgs);
if ($entity instanceof $this->objectClass) { if ($entity instanceof $this->objectClass) {
$this->scheduleForDeletion($entity); $this->scheduleForDeletion($entity);