2012-04-06 49 views
5

Có ai biết liệu có thể có một gói sử dụng trình đọc chú thích để đọc các chú thích tùy chỉnh mới cho các đối tượng không phải là Doctrine không? Tất cả mọi thứ tôi đã thấy cho đến nay là cho một bộ điều khiển hoặc để mở rộng Doctrine theo một cách nào đó.Chú thích tùy chỉnh Symfony2 cho các đối tượng

Những gì tôi muốn để có thể làm là một cái gì đó như thế này:

class MyTestClass { 

    /** 
    * @MyBundleName\Foo 
    */ 
    public $foo_var; 

    /** 
    * @MyBundleName\Bar 
    */ 
    public $bar_var; 
} 

Và sau đó có một số mã mà khi đưa ra một thể hiện của MyTestClass có thể làm việc ra mà chú thích áp dụng mà thuộc tính.

Trả lời

10

Đúng hơn, hãy tìm hiểu thêm về cách Doctrine thực hiện việc này và tôi nghĩ tôi biết cách thực hiện. Vì vậy, nếu bất cứ ai khác cần phải làm điều này đây là cách tôi đang làm điều đó (sẽ được đánh giá cao của bất kỳ thông tin phản hồi)

Tôi có một dịch vụ mà tôi đang sử dụng để đọc các chú thích như vậy trong config.yml tôi đã bao gồm annotation_reader dịch vụ cung cấp quyền truy cập vào các phương pháp để đọc chú thích của bạn.

Mỗi chú thích cần phải giải quyết để một lớp học và các lớp phải mở rộng các lớp chú thích cơ sở Doctrine, như vậy để làm chú thích Foo từ câu hỏi của tôi bạn muốn làm điều gì đó như:

namespace MyBundleName 

class Foo extends \Doctrine\Common\Annotations\Annotation { 

} 

Sau đó, bạn có thể đọc chú thích bằng cách thực hiện:

$class = get_class($object); 
foreach(object_get_vars($object) as $fieldname => $val){ 

    //$this->annotationReader is an instance of the annotation_reader service 
    $annotations = $this->annotationReader 
        ->getPropertyAnnotations(
         new \ReflectionProperty($class, $fieldName) 
        ); 

    //$annotations will now contain an array of matched annotations, most likely just an instance of the annotation class created earlier 
} 

Hy vọng rằng có thể sử dụng cho người khác!

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