【问题标题】:is defineAuditFields() deprecated in 4.2.1?4.2.1 中不推荐使用 defineAuditFields() 吗?
【发布时间】:2012-06-14 02:52:55
【问题描述】:

如果我在我的模型中使用 defineAuditFields 我会收到错误 ->exception("没有为这个对象定义方法", "Logic")

defineAuditFields() 在 4.2.1 中被弃用了吗?

有新方法吗?

【问题讨论】:

    标签: php frameworks atk4


    【解决方案1】:

    defineAuditFields 是旧 MVC 模型的产物。新的敏捷工具包允许您使用控制器来做同样的事情。 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
        }
    }
    

    附言如果我这里的代码有一些小错误,请[编辑]它们。

    【讨论】:

      猜你喜欢
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 2016-04-22
      • 2012-11-14
      相关资源
      最近更新 更多