0

モデルで defineAuditFields を使用すると、エラー ->exception("Method is not defined for this object", "Logic") が発生します

defineAuditFields() は 4.2.1 で廃止されましたか?

新しい方法はありますか?

4

1 に答える 1

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
    }
}

ps ここでのコードに軽微な誤りが含まれている場合は、それらを [編集] してください。

于 2012-06-14T12:23:41.247 に答える