Если я использую defineAuditFields в своих моделях, я получаю сообщение об ошибке ->exception("Метод не определен для этого объекта", "Логика")
DefineAuditFields() устарел в версии 4.2.1?
Есть ли новый метод?
Если я использую defineAuditFields в своих моделях, я получаю сообщение об ошибке ->exception("Метод не определен для этого объекта", "Логика")
DefineAuditFields() устарел в версии 4.2.1?
Есть ли новый метод?
defineAuditFields был артефактом старой модели MVC. Новый Agile Toolkit позволяет делать то же самое с помощью контроллеров. Янис указал это в своем руководстве по миграции: http://www.ambienttech.lv/blog/ теперь вы можете использовать контроллеры.
class Controller_Audit extends AbstractController {
function init(){
parent::init();
$this->owner->hasOne('User','created_by')->system(true);
$this->owner->hasOne('created_dts')->type('datetime')->system(true);
$this->owner->hasOne('modified_dts')->type('datetime')->system(true);
$this->owner->addHook('beforeInsert,beforeModify',$this);
}
function beforeInsert($m){
$m['created_by']=$this->api->auth->model->id;
$m['created_dts']=date('Y-m-d H:i:s');
}
function beforeModify($m){
$m['modified_dts']=date('Y-m-d H:i:s');
}
}
Конечно, вы можете сделать больше действий здесь. Если вам нужно мягкое удаление, то что-то вроде этого будет хорошо работать:
class Controller_SoftDelete extends AbstractController {
function init(){
parent::init();
$this->owner->hasOne('deleted')
->type('boolean')->enum(array('Y','N'))
->system(true);
$this->owner->addCondition('deleted',false);
$this->owner->addHook('beforeDelete',$this);
}
function beforeDelete($m,$q){
$q->set('deleted','Y')->update();
$q->where('1=2'); // avoid actual deletion
}
}
p.s. если мой код содержит незначительные ошибки, пожалуйста, [отредактируйте] их.