1
0
Fork 0
mirror of synced 2025-04-01 12:26:11 +03:00

[2.0] DDC-381 - Unserialized Entity that was a proxy during serialize() will fatal when accessing methods that call _load() - A check for the existance of entity persister solves the problem.

This commit is contained in:
beberlei 2010-02-28 14:45:09 +00:00
parent a0fc09855b
commit 8fbcf7d571
2 changed files with 59 additions and 1 deletions

View file

@ -256,7 +256,7 @@ namespace <namespace> {
$this->_identifier = $identifier;
}
private function _load() {
if (!$this->__isInitialized__) {
if (!$this->__isInitialized__ && $this->_entityPersister) {
$this->__isInitialized__ = true;
$this->_entityPersister->load($this->_identifier, $this);
unset($this->_entityPersister);

View file

@ -0,0 +1,58 @@
<?php
namespace Doctrine\Tests\ORM\Functional\Ticket;
use Doctrine\ORM\UnitOfWork;
require_once __DIR__ . '/../../../TestInit.php';
class DDC381Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
protected function setUp()
{
parent::setUp();
try {
$this->_schemaTool->createSchema(array(
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC381Entity'),
));
} catch(\Exception $e) {
}
}
public function testCallUnserializedProxyMethods()
{
$entity = new DDC381Entity();
$this->_em->persist($entity);
$this->_em->flush();
$this->_em->clear();
$persistedId = $entity->getId();
$entity = $this->_em->getReference('Doctrine\Tests\ORM\Functional\Ticket\DDC381Entity', $persistedId);
// explicitly load proxy
$id = $entity->getId();
$data = serialize($entity);
$entity = unserialize($data);
$this->assertEquals($persistedId, $entity->getId());
}
}
/**
* @Entity
*/
class DDC381Entity
{
/**
* @Id @Column(type="integer") @generatedValue
*/
protected $id;
public function getId()
{
return $this->id;
}
}