Yii 프레임워크로 AR 클래스 자동 기록 로그 구현

2387 단어
  • 새로운 AR 클래스 MyActiveRecord를 정의하고 CActiveRecord 클래스를 계승한 다음 로그 처리 이벤트 RecordLog:
  • public function RecordLog($objEvent) { 
          // , 
    	}

      2. 클래스를 초기화할 때 로그 이벤트 기록에 이벤트 처리 프로그램을 추가합니다. 즉, 로그 이벤트 연결:
    public function init() {
           // 
    	$this->attachEventHandler('onRecordLog', array($this, 'RecordLog'));
    	parent::init();
    	}

      3. 로깅 이벤트를 추가합니다. 즉, 바인딩된 로깅 이벤트에서 로깅 이벤트를 트리거합니다.
    public function onRecordLog($objEvent) {
            $this->raiseEvent('onRecordLog', $objEvent);
    	}

       4. 기록 변경을 추가하는 방법 (insert, update...)기록 로그를 호출하는 이벤트, 즉 기본 클래스의 insert, 업데이트 등을 다시 쓰는 방법, 기록 업데이트가 성공한 후에 기록 로그의 이벤트를 호출하여 로그의 기록을 완성합니다.
    public function addLogData($bFlush = false) {
    	if($bFlush && $this->hasEventHandler('onRecordLog')) {
    	    $this->onRecordLog(new CEvent($this));
             }
    	$this->aLogs = array();
    	$this->nLogCount = 0;
    	$this->nListId = null;
    	$this->sListType = '';
    	$this->nLogUser = null;
    	$this->sLogDesc = '';
    	}

    insert 다시 쓰기 방법:
    public function insert($attributes = null) {
    	$bIsSuccess = parent::insert($attributes);
    	$this->addLogData($bIsSuccess);
    	return $bIsSuccess;
    	}

    이렇게 하면 다른 모델 클래스는 MyActiveRecord 클래스를 계승한 후 RecordLog 방법을 다시 쓴 후 모델 기록을 업데이트할 때 AR 클래스는 정보 변경된 로그를 자동으로 기록하여 로그 데이터를 저장하여 다른 프로그램이 로그를 분석하고 이용하도록 한다.
    MyRecordRecord 클래스의 전체 구현:
    abstract class MyActiveRecord extends CActiveRecord {
           public function init() {
    		// 
    		$this->attachEventHandler('onRecordLog', array($this, 'RecordLog'));
    		parent::init();
    	}
    	
    	public function insert($attributes = null) {
    		$bIsSuccess = parent::insert($attributes);
    		$this->addLogData($bIsSuccess);
    		return $bIsSuccess;
    	}
    	
    	public function update($attributes = null) {
    		$bIsSuccess = parent::update($attributes);
    		$this->flushLogData($bIsSuccess);
    		return $bIsSuccess;
    	}
    	
    	public function flushLogData($bFlush = false) {
    		if($bFlush && $this->hasEventHandler('onRecordLog')) {
    			$this->onAddRecordLog(new CEvent($this));
    		}
    	}
    	
    	public function onRecordLog($objEvent) {
    		$this->raiseEvent('onRecordLog', $objEvent);
    	}
    	
    	public function RecordLog($objEvent) { 
    		// , 
    	}
    }

    좋은 웹페이지 즐겨찾기