Получить имя объекта из объекта класса - PullRequest
16 голосов
/ 03 февраля 2012

У меня есть следующий код:

namespace Acme\StoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Acme\StoreBundle\Entity\User
 *
 * @ORM\Table(name="users")
 * @ORM\Entity()
 */
class User {
...
}

$user = new User();

Кто-нибудь знает, как теперь я могу получить имя объекта (AcmeStoreBundle:User) из объекта User?

Ответы [ 3 ]

46 голосов
/ 09 января 2013

Это всегда должно работать (без возврата класса Proxy):

$em = $this->container->get('doctrine')->getEntityManager(); 
$className = $em->getClassMetadata(get_class($object))->getName();

Поскольку getClassMetadata устарело, теперь вы можете использовать getMetadataFor

$entityName = $this->em->getMetadataFactory()->getMetadataFor(get_class($object))->getName();
9 голосов
/ 03 февраля 2012

PHP get_class() функция вернет User и пространство имен (см. Комментарии в документации php).

7 голосов
/ 08 января 2015

getClassMetadata () устарела и будет удалена в будущем. Вместо этого используйте getMetadataFor ():

$entityName = $this->em->getMetadataFactory()->getMetadataFor(get_class($entity))->getName();

Или полная функция:

/**
 * Returns Doctrine entity name
 *
 * @param mixed $entity
 *
 * @return string
 * @throws \Exception
 */
private function getEntityName($entity)
{
    try {
        $entityName = $this->em->getMetadataFactory()->getMetadataFor(get_class($entity))->getName();
    } catch (MappingException $e) {
        throw new \Exception('Given object ' . get_class($entity) . ' is not a Doctrine Entity. ');
    }

    return $entityName;
}
...