2010-10-06 37 views
11

Các mục sau:Học thuyết 2 nhận tên lớp thực của lớp proxy

Tôi có xấp xỉ 20 mẫu. Các lớp này mở rộng một lớp cơ sở. Lớp cơ sở này chứa một phương thức để có thể xác định tên lớp của phần tử con. Thông thường bạn có thể này với:

get_called_class(); 

Nhưng trong nhiều trường hợp học thuyết 2 sử dụng ProxyClasses và trong trường hợp đó get_called_class() hàm trả về một cái gì đó như:

Proxies\BasePageElementProxy 

Trong khi tên gốc là \ Căn cứ \ PageElement . Ai có thể cho tôi biết làm thế nào tôi có thể tìm hiểu những gì tên của lớp này là (không tạo ra tên ra khỏi chuỗi Proxies \ BaseSectionProxy nguyên nhân đó là bẩn và trong nhiều trường hợp không đáng tin cậy).

Trả lời

11

Bạn nhận được tên thật bằng cách gọi:

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

Tuy nhiên điều này đòi hỏi một tham chiếu đến EntityManager. Nếu bạn đang làm các phương pháp công cụ tìm tĩnh thông qua các lớp thực thể của bạn, bạn sẽ có quyền truy cập vào đó tĩnh/toàn cầu anyways dù, ví dụ:

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

Thank you very much ! Làm việc như một say mê. Có vẻ như bạn đang trở thành giáo viên cá nhân của tôi khi nói đến Học thuyết! +1 –

55

sử dụng lớp Học thuyết 'ClassUtils'

\Doctrine\Common\Util\ClassUtils::getRealClass(get_class($entity)); 
+19

Nếu bạn đã có một đối tượng, chỉ cần sử dụng 'getClass':' \ Doctrine \ Common \ Util \ ClassUtils :: getClass ($ entity); ' – Nate

Các vấn đề liên quan