Doctrine 2获取代理类的真正类名

时间:2010-10-06 08:13:38

标签: php orm doctrine-orm

以下内容:

我有大约20个型号。这些类扩展了一个基类。此基类包含一个方法,该方法应该能够确定子元素的类名。通常你可以用:

get_called_class();

但在许多情况下,doctrine 2使用ProxyClasses,在这种情况下,get_called_class()函数返回类似的内容:

Proxies\BasePageElementProxy

虽然原始名称是\ Base \ PageElement。任何人都可以告诉我如何找出这个类的名称是什么(没有生成字符串Proxies \ BaseSectionProxy的名称,因为它是脏的,在许多情况下是不可靠的。)

2 个答案:

答案 0 :(得分:61)

使用Doctrine类'ClassUtils'

\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity));

答案 1 :(得分:12)

通过致电获得真实姓名:

$em->getClassMetadata(get_called_class())->name;

然而,这需要对EntityManager的引用。如果您通过实体类执行静态查找程序方法,则无论如何都可以静态/全局访问,例如:

abstract class Record
{
    private static $em = null;

    static public function setEntityManager($em)
    {
        self::$em = $em;
    }

    static public function __callStatic($method, $args)
    {
        $className = self::$em->getClassMetadata(get_called_class())->name;
        return call_user_func_array(array(self::$em->getRepository($className), $method), $args);
    }
}