Doctrine 2プロキシクラスの実際のクラス名を取得します
-
28-09-2019 - |
質問
以下:
約20のモデルがあります。これらのクラスは基本クラスを拡張します。この基本クラスには、子要素のクラス名を決定できるメソッドが含まれています。通常、あなたはこれを使用できます:
get_called_class();
しかし、多くの場合、Doctrine 2はプロキシクラスを使用しています。その場合、get_called_class()関数は次のようなものを返します。
Proxies\BasePageElementProxy
一方、元の名前は base PageElementです。このクラスの名前が何であるかを知ることができる人は誰でも教えてくれますか(文字列プロキシから名前を生成せずに baseSectionProxy原因は汚れていて、多くの場合信頼できません)。
解決
あなたは電話をかけることによって本名を取得します:
$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);
}
}
他のヒント
教義クラス「Classutils」を使用する
\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity));
所属していません StackOverflow