Доктрина 2 Получить настоящее имя класса класса прокси

StackOverflow https://stackoverflow.com/questions/3870569

  •  28-09-2019
  •  | 
  •  

Вопрос

Последующий:

У меня есть приблизительно 20 моделей. Эти классы расширяют базовый класс. Этот базовый класс содержит метод, который должен иметь возможность определять классное значение элемента ребенка. Обычно вы можете это с:

get_called_class();

Но во многих случаях доктрина 2 использует ProxyClasses, и в этом случае функция get_called_class () возвращает что-то вроде:

Proxies\BasePageElementProxy

Хотя исходное имя base statelement. Кто-нибудь может сказать мне, как я могу узнать, что название этого класса (без генерации названия из строковых прокси baseSectionProxy причина, что грязно и во многих случаях ненадежна).

Это было полезно?

Решение

Вы получаете настоящее имя, позвонив:

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

Однако это требует ссылки на EntiteManager. Если вы занимаетесь статическими методами поиска по классам сущности, у вас все равно будет доступ к этому статически / глобально, например, например:

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));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top