Получить имя объекта из объекта класса
У меня есть следующий код:
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
?
Ответы
Ответ 1
Это всегда должно работать (нет возврата класса 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();
Ответ 2
PHP get_class()
функция вернет User
и пространство имен (см. комментарии в php docs).
Ответ 3
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;
}