Question

Ce qui suit:

Je approximantely 20 modèles. Ces classes étendent une classe de base. Cette classe de base contient une méthode qui devrait être en mesure de déterminer le nom de classe de l'élément enfant. Normalement, cela pourrait-il avec:

get_called_class();

Mais dans bien des cas, la doctrine 2 utilisations ProxyClasses et dans ce cas, la fonction retourne get_called_class () quelque chose comme:

Proxies\BasePageElementProxy

Alors que le nom d'origine est \ base \ PageElement. Quelqu'un peut-il me dire comment je peux savoir ce que le nom de cette classe est (sans générer le nom de la chaîne proxies \ BaseSectionProxy cause qui est sale et dans de nombreux cas peu fiables).

Était-ce utile?

La solution

Vous obtenez le vrai nom en appelant:

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

Cela nécessite cependant une référence à la EntityManager. Si vous faites des méthodes de recherche statiques à travers vos classes d'entités, vous aurez accès à cette statiquement / globalement de toute façon que, par exemple:

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);
    }
}

Autres conseils

utilisez la classe Doctrine 'ClassUtils'

\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top