2014-09-23 5 views
1

Мне сложно найти, могу ли я добавлять пользовательские функции в классы доктрины.В классах доктрины можно добавить пользовательские функции?

Допустим, у меня есть

use Doctrine\ORM\Mapping as ORM; 

/** 
* Map 
*/ 
class Map 
{ 
    /** 
    * @var integer 
    */ 
    private $id; 
    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 
} 

В моих классах я хотел бы некоторые пользовательские функции, которые возвращают значения, которые сами по себе не должны храниться в Databse, а лишь обеспечивают проверку функциональности определенных значений.

Для примера я хотел бы добавить функцию isAboveTen();

function isAboveTen() 
    { 
    return this->id > 10; 
    } 

Могу ли я просто идти вперед и делать это, или мне нужно, чтобы определить их как специальное поле в файле XML или аннотации?

+0

Просто добавьте их ... – Crozin

+0

Я рассматриваю это, но я бы предпочел, чтобы я не добавлял некоторые аннотации/xml и т. Д., Поэтому я не испортил менеджер сущности – Tschallacka

+0

Вам не нужно ничего добавить к конфигурации Доктрины. Классы объектов предназначены для представления необработанных данных (DTO) и предоставляют некоторую базовую/просто логическую информацию, связанную с этими данными. – Crozin

ответ

2

Вы можете смело добавлять функции, работающие с простыми типами членов, Doctrine игнорирует их, если вы не добавляете никаких комментариев.

Вопрос, следует ли вам избегать этого, зависит от вашей общей архитектуры и правил кодирования. Как упоминалось в комментариях, существуют оба варианта с логикой, возможно, внутри vs вне сущностей.

Однако, вы должны иметь в виду, что:

Все стойкие свойства/поля любого класса сущностей всегда должна быть частной или защищен, в противном случае отложенной загрузки не может работать, как ожидалось. В случае, если вы выполняете сериализацию объектов (например, Session), свойства должны быть защищены (см. Раздел Сериализация ниже).

Это описано в documentation. Поскольку вы получаете доступ к этим членам внутри вашего класса, магические методы, такие как __get(), не будут вызываться.

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