12

以下:

私は約20のモデルを持っています。これらのクラスは基本クラスを拡張します。この基本クラスには、子要素のクラス名を決定できるメソッドが含まれています。通常、これは次のように行うことができます。

get_called_class();

しかし、多くの場合、ドクトリン 2 は ProxyClasses を使用し、その場合、get_called_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 に答える