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.
!! Обратите внимание, что слушатели оповещаются после вызыва соответствующего шаблонного метода.