Pregunta

La siguiente:

Tengo approximantely 20 modelos. Estas clases se extienden una clase base. Esta clase de base contiene un método que debe ser capaz de determinar el nombre de clase del elemento de niño. Normalmente, usted podría esto con:

get_called_class();

Sin embargo, en muchos casos la doctrina 2 utiliza ProxyClasses y en ese caso la get_called_class () devuelve algo como:

Proxies\BasePageElementProxy

Mientras que el nombre original es \ Base \ PageElement. Alguien puede decirme cómo puedo averiguar cuál es el nombre de esta clase es (sin generar el nombre de la cadena de servidores proxy \ BaseSectionProxy causa que es sucio y en muchos casos no fiables).

¿Fue útil?

Solución

Se obtiene el verdadero nombre llamando a:

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

Sin embargo, esto requiere una referencia a la EntityManager. Si usted está haciendo métodos de búsqueda estáticos a través de sus clases de entidad que tendrá acceso a esa forma estática / global de todos modos, aunque, por ejemplo:

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

Otros consejos

utilizar los 'ClassUtils' clase Doctrina

\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top