139 lines
3.3 KiB
PHP
139 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace Gedmo\Tool\Wrapper;
|
|
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use Doctrine\ORM\Proxy\Proxy;
|
|
|
|
/**
|
|
* Wraps entity or proxy for more convenient
|
|
* manipulation
|
|
*
|
|
* @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
|
|
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
|
*/
|
|
class EntityWrapper extends AbstractWrapper
|
|
{
|
|
/**
|
|
* Entity identifier
|
|
*
|
|
* @var array
|
|
*/
|
|
private $identifier;
|
|
|
|
/**
|
|
* True if entity or proxy is loaded
|
|
*
|
|
* @var boolean
|
|
*/
|
|
private $initialized = false;
|
|
|
|
/**
|
|
* Wrap entity
|
|
*
|
|
* @param object $entity
|
|
* @param \Doctrine\ORM\EntityManagerInterface $em
|
|
*/
|
|
public function __construct($entity, EntityManagerInterface $em)
|
|
{
|
|
$this->om = $em;
|
|
$this->object = $entity;
|
|
$this->meta = $em->getClassMetadata(get_class($this->object));
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function getPropertyValue($property)
|
|
{
|
|
$this->initialize();
|
|
|
|
return $this->meta->getReflectionProperty($property)->getValue($this->object);
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function setPropertyValue($property, $value)
|
|
{
|
|
$this->initialize();
|
|
$this->meta->getReflectionProperty($property)->setValue($this->object, $value);
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function hasValidIdentifier()
|
|
{
|
|
return (null !== $this->getIdentifier());
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function getRootObjectName()
|
|
{
|
|
return $this->meta->rootEntityName;
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function getIdentifier($single = true)
|
|
{
|
|
if (null === $this->identifier) {
|
|
if ($this->object instanceof Proxy) {
|
|
$uow = $this->om->getUnitOfWork();
|
|
if ($uow->isInIdentityMap($this->object)) {
|
|
$this->identifier = $uow->getEntityIdentifier($this->object);
|
|
} else {
|
|
$this->initialize();
|
|
}
|
|
}
|
|
if (null === $this->identifier) {
|
|
$this->identifier = array();
|
|
$incomplete = false;
|
|
foreach ($this->meta->identifier as $name) {
|
|
$this->identifier[$name] = $this->getPropertyValue($name);
|
|
if (null === $this->identifier[$name]) {
|
|
$incomplete = true;
|
|
}
|
|
}
|
|
if ($incomplete) {
|
|
$this->identifier = null;
|
|
}
|
|
}
|
|
}
|
|
if ($single && is_array($this->identifier)) {
|
|
return reset($this->identifier);
|
|
}
|
|
|
|
return $this->identifier;
|
|
}
|
|
|
|
/**
|
|
* Initialize the entity if it is proxy
|
|
* required when is detached or not initialized
|
|
*/
|
|
protected function initialize()
|
|
{
|
|
if (!$this->initialized) {
|
|
if ($this->object instanceof Proxy) {
|
|
if (!$this->object->__isInitialized__) {
|
|
$this->object->__load();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
public function isEmbeddedAssociation($field)
|
|
{
|
|
return false;
|
|
}
|
|
}
|