12

以下:

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

get_called_class();

但在许多情况下,学说 2 使用 ProxyClasses,在这种情况下 get_call_class() 函数返回如下内容:

Proxies\BasePageElementProxy

而原来的名字是\Base\PageElement。谁能告诉我如何找出这个类的名称(不从字符串 Proxies\BaseSectionProxy 生成名称,因为它很脏,在许多情况下不可靠)。

4

2 回答 2

66

使用 Doctrine 类 'ClassUtils'

\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity));
于 2013-02-15T13:02:38.537 回答
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);
    }
}
于 2010-10-06T16:59:23.537 回答