Инструменты пользователя

Инструменты сайта


limb3_2007_4:ru:packages:active_record:enhancement

Расширение поведения базового класса lmbActiveRecord

lmbActiveRecord представляет 2 базовых способа расширять свое поведение:

  1. Путем расширения шаблонных методов (TemplateMethod), которые внедрены в различные метода методов save() и destroy(). Этим методом могут пользоваться дочерние классы
  2. Путем регистрации случашелей (event listeners) на различные события, которые происходят в методах save() и destory(). Этим могут пользоваться клиенты объектов ActiveRecord.

Перекрытие шаблонных методов

lmbActiveRecord содержит различные пустые шаблонные методы, которые дочерние классы могут перекрывать чтобы расширить поведение родительского класса (в скобках указаны публичные метод, где они вызываются):

  • (destroy) _onBeforeDestroy(); - вызывается до удаления объектов связей has_one, has_many и связей has_many_to_many
  • (destroy) _onAfterDestroy(); - вызывается после удаления записи из базы данных
  • (save) _onBeforeSave(); - вызывается после того, как будут сохранены объекты связей has_one и many_belongs_to
  • (save) _onBeforeUpdate(); - вызывается перед валидацией данных, в случае, если объект был загружен (процесс обновления записи - UPDATE)
  • (save) _onUpdate(); - вызывается после валидации перед непосредственным изменением записи в базе данных
  • (save) _onAfterUpdate(); - вызывается после изменения записи в базе данных
  • (save) _onBeforeCreate(); - вызывается перед валидацией данных, в случае, если объект еще не был сохранен (процесс создания новой записи - INSERT)
  • (save) _onCreate(); - вызывается после валидации перед непосредственным созданием записи в базе данных
  • (save) _onAfterCreate(); - вызывается после создания записи в базе данных
  • (save) _onAfterSave(); - вызывается перед сохранением объектов связей has_many, has_many_to_many и belongs_to.

Порядок и количество шаблонных методов является тестовым и еще окончательно не определенным. Если у вас появляются сложности или предложения, касающиеся этому вопросы - обращайтесь к разработчикам.

Регистрация слушателей на объекты

lmbActiveRecord позволяет регистрировать слушатели на определенные события, которые в настоящее время соответствуют шаблонным методам, которые мы указали выше.

Регистрация слушателя производится путем вызова метода вида registerOn_XXX_Callback($object, $method), где _XXX_ - тип события, $object - слушатель, а $method, название метода, который будет вызываться объектом ActiveRecord при оповещении. В $method приходит в качестве параметра сам объект ActiveRecord. Например:

class Document extends lmbActiveRecord
{
[...]
}
 
class SomeController extends lmbController
{
  function doSomeAction()
  {
    $document = new Document($document_id);
    $document->registerOnUpdateCallback($this, 'processDocumentUpdate');
    [...]
    $document->save();
  }
 
  function processDocumentUpdate($document)
  {
    [... do something special with document]
  }
}

Слушатели удобны в том случае, когда объекты ActiveRecord обрабатываются группой объектов по цепочке и логика по обработке достаточно сильна распределена по классам.

Список методов, которые позволяют подписаться на соответствующие события (в скобках указаны публичные метод, где они вызываются):

  • (destroy) registerOnBeforeDestroyCallback(); - событие генерируется до удаления объектов связей has_one, has_many и связей has_many_to_many
  • (destroy) registerOnAfterDestroyCallback(); - событие генерируется после удаления записи из базы данных
  • (save) registerOnBeforeSaveCallback(); - событие генерируется после того, как будут сохранены объекты связей has_one и many_belongs_to
  • (save) registerOnBeforeUpdateCallback(); - событие генерируется перед валидацией данных, в случае, если объект был загружен (процесс обновления записи - UPDATE)
  • (save) registerOnUpdateCallback(); - событие генерируется после валидации перед непосредственным изменением записи в базе данных
  • (save) registerOnAfterUpdateCallback(); - событие генерируется после изменения записи в базе данных
  • (save) registerOnBeforeCreateCallback(); - событие генерируется перед валидацией данных, в случае, если объект еще не был сохранен (процесс создания новой записи - INSERT)
  • (save) registerOnCreateCallback(); - событие генерируется после валидации перед непосредственным созданием записи в базе данных
  • (save) registerOnAfterCreateCallback(); - событие генерируется после создания записи в базе данных
  • (save) registerOnAfterSaveCallback(); - событие генерируется перед сохранением объектов связей has_many, has_many_to_many и belongs_to.

!! Обратите внимание, что слушатели оповещаются после вызыва соответствующего шаблонного метода.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
  _____   ____   ___    ___    __ __
 / ___/  /  _/  / _ \  / _ )  / // /
/ (_ /  _/ /   / // / / _  | / _  / 
\___/  /___/  /____/ /____/ /_//_/
 
limb3_2007_4/ru/packages/active_record/enhancement.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)