1
0
mirror of synced 2024-12-05 03:06:05 +03:00

fix EntityGenerator RegenerateEntityIfExists

This commit is contained in:
Fedik 2015-03-27 13:10:14 +02:00 committed by Marco Pivetta
parent ecb1e1060a
commit 2290d1ff9b
2 changed files with 34 additions and 3 deletions

View File

@ -701,7 +701,7 @@ public function __construct()
*/
protected function hasProperty($property, ClassMetadataInfo $metadata)
{
if ($this->extendsClass() || class_exists($metadata->name)) {
if ($this->extendsClass() || (!$this->isNew && class_exists($metadata->name))) {
// don't generate property if its already on the base class.
$reflClass = new \ReflectionClass($this->getClassToExtend() ?: $metadata->name);
if ($reflClass->hasProperty($property)) {
@ -723,7 +723,7 @@ public function __construct()
*/
protected function hasMethod($method, ClassMetadataInfo $metadata)
{
if ($this->extendsClass() || class_exists($metadata->name)) {
if ($this->extendsClass() || (!$this->isNew && class_exists($metadata->name))) {
// don't generate method if its already on the base class.
$reflClass = new \ReflectionClass($this->getClassToExtend() ?: $metadata->name);

View File

@ -527,7 +527,25 @@ class EntityGeneratorTest extends \Doctrine\Tests\OrmTestCase
$this->assertFalse($rc3->hasMethod('getCreatedAt'));
$this->assertFalse($rc3->hasMethod('setCreatedAt'));
}
public function testRegenerateEntityClass()
{
$metadata = $this->generateBookEntityFixture();
$this->loadEntityClass($metadata);
$className = basename(str_replace('\\', '/', $metadata->name));
$path = $this->_tmpDir . '/' . $this->_namespace . '/' . $className . '.php';
$classTest = file_get_contents($path);
$this->_generator->setRegenerateEntityIfExists(true);
$this->_generator->setBackupExisting(false);
$this->_generator->writeEntityClass($metadata, $this->_tmpDir);
$classNew = file_get_contents($path);
$this->assertSame($classTest,$classNew);
}
/**
* @return array
*/
@ -639,6 +657,19 @@ class
);
}
/**
* @param ClassMetadataInfo $metadata
*/
private function loadEntityClass(ClassMetadataInfo $metadata)
{
$className = basename(str_replace('\\', '/', $metadata->name));
$path = $this->_tmpDir . '/' . $this->_namespace . '/' . $className . '.php';
$this->assertFileExists($path);
require_once $path;
}
/**
* @param string $type
* @param \ReflectionProperty $property