Your IP : 127.0.0.1
<?php
/**
* @see https://github.com/laminas/laminas-hydrator for the canonical source repository
* @copyright https://github.com/laminas/laminas-hydrator/blob/master/COPYRIGHT.md
* @license https://github.com/laminas/laminas-hydrator/blob/master/LICENSE.md New BSD License
*/
namespace Laminas\Hydrator\Aggregate;
use Laminas\EventManager\EventManager;
use Laminas\EventManager\EventManagerAwareInterface;
use Laminas\EventManager\EventManagerInterface;
use Laminas\Hydrator\HydratorInterface;
/**
* Aggregate hydrator that composes multiple hydrators via events
*/
class AggregateHydrator implements HydratorInterface, EventManagerAwareInterface
{
const DEFAULT_PRIORITY = 1;
/**
* @var EventManagerInterface|null
*/
protected $eventManager;
/**
* Attaches the provided hydrator to the list of hydrators to be used while hydrating/extracting data
*
* @param HydratorInterface $hydrator
* @param int $priority
*/
public function add(HydratorInterface $hydrator, $priority = self::DEFAULT_PRIORITY)
{
$listener = new HydratorListener($hydrator);
$listener->attach($this->getEventManager(), $priority);
}
/**
* {@inheritDoc}
*/
public function extract($object)
{
$event = new ExtractEvent($this, $object);
$this->getEventManager()->triggerEvent($event);
return $event->getExtractedData();
}
/**
* {@inheritDoc}
*/
public function hydrate(array $data, $object)
{
$event = new HydrateEvent($this, $object, $data);
$this->getEventManager()->triggerEvent($event);
return $event->getHydratedObject();
}
/**
* {@inheritDoc}
*/
public function setEventManager(EventManagerInterface $eventManager)
{
$eventManager->setIdentifiers([__CLASS__, get_class($this)]);
$this->eventManager = $eventManager;
}
/**
* {@inheritDoc}
*/
public function getEventManager()
{
if (null === $this->eventManager) {
$this->setEventManager(new EventManager());
}
return $this->eventManager;
}
}