1
0
mirror of synced 2024-12-13 22:56:04 +03:00

give the FQCN to the naming strategy

This commit is contained in:
Fabio B. Silva 2012-01-03 16:59:43 -02:00
parent 3fff83cd13
commit d8227fcd06
2 changed files with 48 additions and 2 deletions

View File

@ -771,13 +771,13 @@ class ClassMetadataInfo implements ClassMetadata
* Initializes a new ClassMetadata instance that will hold the object-relational mapping * Initializes a new ClassMetadata instance that will hold the object-relational mapping
* metadata of the class with the given name. * metadata of the class with the given name.
* *
* @param string $entityName The name of the entity class the new instance is used for. * @param ReflectionService $reflService The reflection service.
*/ */
public function initializeReflection($reflService) public function initializeReflection($reflService)
{ {
$this->reflClass = $reflService->getClass($this->name); $this->reflClass = $reflService->getClass($this->name);
$this->namespace = $reflService->getClassNamespace($this->name); $this->namespace = $reflService->getClassNamespace($this->name);
$this->table['name'] = $this->namingStrategy->classToTableName($reflService->getClassShortName($this->name)); $this->table['name'] = $this->namingStrategy->classToTableName($this->name);
if ($this->reflClass) { if ($this->reflClass) {
$this->name = $this->rootEntityName = $this->reflClass->getName(); $this->name = $this->rootEntityName = $this->reflClass->getName();

View File

@ -595,4 +595,50 @@ class ClassMetadataTest extends \Doctrine\Tests\OrmTestCase
$this->setExpectedException("Doctrine\ORM\Mapping\MappingException", "The target-entity Doctrine\Tests\Models\CMS\UnknownClass cannot be found in 'Doctrine\Tests\Models\CMS\CmsUser#address'."); $this->setExpectedException("Doctrine\ORM\Mapping\MappingException", "The target-entity Doctrine\Tests\Models\CMS\UnknownClass cannot be found in 'Doctrine\Tests\Models\CMS\CmsUser#address'.");
$cm->validateAssocations(); $cm->validateAssocations();
} }
/**
* @group DDC-984
* @group DDC-559
* @group DDC-1575
*/
public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy()
{
$namingStrategy = new MyNamespacedNamingStrategy();
$addressMetadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy);
$articleMetadata = new ClassMetadata('DoctrineGlobal_Article', $namingStrategy);
$routingMetadata = new ClassMetadata('Doctrine\Tests\Models\Routing\RoutingLeg',$namingStrategy);
$addressMetadata->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
$articleMetadata->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
$routingMetadata->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
$addressMetadata->mapManyToMany(array(
'fieldName' => 'user',
'targetEntity' => 'CmsUser'
));
$articleMetadata->mapManyToMany(array(
'fieldName' => 'author',
'targetEntity' => 'Doctrine\Tests\Models\CMS\CmsUser'
));
$this->assertEquals('routing_routingleg', $routingMetadata->table['name']);
$this->assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->associationMappings['user']['joinTable']['name']);
$this->assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->associationMappings['author']['joinTable']['name']);
}
}
class MyNamespacedNamingStrategy extends \Doctrine\ORM\Mapping\DefaultNamingStrategy
{
/**
* {@inheritdoc}
*/
public function classToTableName($className)
{
if (strpos($className, '\\') !== false) {
$className = str_replace('\\', '_', str_replace('Doctrine\Tests\Models\\', '', $className));
}
return strtolower($className);
}
} }