是不是在4.2.1中不推荐使用defineAuditFields()?

时间:2012-06-14 02:52:55

标签: php frameworks atk4

如果我在模型中使用defineAuditFields,我会收到错误 - >异常(“没有为此对象定义方法”,“逻辑”)

是不在4.2.1中使用的defineAuditFields()?

有新方法吗?

1 个答案:

答案 0 :(得分:0)

defineAuditFields是来自旧MVC模型的工件。新的Agile Toolkit允许您使用控制器来执行相同的操作。 Janis在他的迁移指南中概述了这一点: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。如果我的代码包含一些小错误,请[编辑]它们。