Ren*_*gen 12 php orm doctrine-orm
下列:
我有大约20个型号.这些类扩展了一个基类.此基类包含一个方法,该方法应该能够确定子元素的类名.通常你可以这样:
get_called_class();
Run Code Online (Sandbox Code Playgroud)
但在许多情况下,doctrine 2使用ProxyClasses,在这种情况下,get_called_class()函数返回类似于:
Proxies\BasePageElementProxy
Run Code Online (Sandbox Code Playgroud)
而原始名称是\ Base\PageElement.任何人都可以告诉我如何找出这个类的名称是什么(没有生成字符串Proxies\BaseSectionProxy的名称,因为它是脏的,在许多情况下是不可靠的).
小智 61
使用Doctrine类'ClassUtils'
\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity));
Run Code Online (Sandbox Code Playgroud)
beb*_*lei 12
通过调用获得真实姓名:
$em->getClassMetadata(get_called_class())->name;
Run Code Online (Sandbox Code Playgroud)
但是,这需要引用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);
}
}
Run Code Online (Sandbox Code Playgroud)