Doctrine 2: аксессоры, мутаторы, fromArray(), toArray()

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

Основное нововведение Doctrine 2 в том, что классы моделей (entities) теперь ни от кого не наследуются. А значит нет функций, добавляемых раньше через Doctrine_Record. Особенно сбивает с толку отсутствие аксессоров и мутаторов для свойств модели. Я поначалу создавал их вручную, но потом понял, что лучше сделать один раз и качественно доступ к свойствам модели. Итак вот пошаговое руководство. Проверено на Doctrine 2.2

  1. Создаём класс DoctrineExtra\ORM\DomainObject.php (содержание файла ниже).
  2. Наследуем все классы модели от него.
  3. Обозначаем все свойства модели как public. Возможно лучше будет сделать их protected.
  4. Теперь вам становятся доступны аксессоры, мутаторы, функции fromArray() и toArray(). Причём toArray() работает рекурсивно по связям модели.

DoctrineExtra\ORM\DomainObject.php

Обратите внимание, что в процессе загрузки (bootstrap) в реестр (Zend_Registry) должен добавляться entityManager.
Удачного вам кодинга!

Ссылки

Implementing ArrayAccess for Domain Objects