2014-02-10 3 views
0

Я новичок в Доктрине (и вообще в ORM). Я создал несколько объектов, смоделированных после моей базы данных, и он отлично работает. Однако мне было интересно, есть ли способ расширить классы сущностей базовым классом, который имеет общие функциональные возможности. Например, я могу использовать магические методы для getters и seters в базовом классе. Возможно ли это с Доктриной 2?Использовать базовый класс на доктрине 2 сущности?

Например:

/** 
* Country 
* 
* @Table(name="country", uniqueConstraints={@UniqueConstraint(name="country_id", columns={"country_id"})}) 
* @Entity 
*/ 
class Country extends MyBaseClass 
{ 
    /** 
    * @var integer 
    * 
    * @Column(name="country_id", type="integer") 
    * @Id 
    * @GeneratedValue 
    */ 
    protected $id; 

    /** 
    * @var string 
    * 
    * @Column(name="code", type="string", length=2, nullable=true) 
    */ 
    protected $code; 

    /** 
    * @var string 
    * 
    * @Column(name="name", type="string", length=75, nullable=true) 
    */ 
    protected $name; 
} 

class MyBaseClass { 
    public function doSomething($var) { 
     return $this->$var; 
    } 
} 
+1

Несомненно. Объекты Doctrine 2 - это просто старые php-объекты. Продлите. Хотя я был немного осторожен в использовании __get, так как это может сломать ленивую загрузку. – Cerad

ответ

1

Entity является общим классом, так что вы можете легко расширить некоторые базовый класс. Вы можете увидеть примеры того, как использовать этот подход, например, в FOSUserBundle. Базовые классы и интерфейсы размещаются под папкой model.

Другим способом обмена функциональными возможностями является traits. Вы можете посмотреть на некоторые общие действия Doctrine 2 от KnpLabs here.

Смежные вопросы