Frage

In der folgenden:

Ich habe approximantely 20 Modelle. Diese Klassen erweitern, um eine Basisklasse. Diese Basisklasse enthält eine Methode der in der Lage sein sollte, die Klassennamen des untergeordneten Elements zu bestimmen. Normalerweise können Sie dies mit:

get_called_class();

Aber in vielen Fällen Lehre 2 verwendet ProxyClasses und in diesem Fall ist die get_called_class () zurück so etwas wie:

Proxies\BasePageElementProxy

Während der ursprüngliche Name ist \ Base \ PageElement. Kann mir jemand sagen, wie ich herausfinden kann, was der Name dieser Klasse ist (ohne den Namen der Strings Proxies \ BaseSectionProxy Ursache heraus zu erzeugen, die schmutzig und in vielen Fällen unzuverlässig ist).

War es hilfreich?

Lösung

Sie erhalten die richtigen Namen durch den Aufruf:

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

Dies erfordert jedoch einen Verweis auf die EntityManager. Wenn Sie statische Suchmethoden durch Ihre Entitätsklassen tun haben Sie Zugriff auf das haben statisch / global sowieso obwohl zum Beispiel:

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

Andere Tipps

verwenden, um die Lehre Klasse 'ClassUtils'

\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top