ThinkPHP中_after_update、_before_updateなどの使い方

1993 ワード

TPシステムThinkModelクラスにはいくつかの有用な方法が隠されています.
_before_insert、_after_insert、_before_delete 、_after_delete、_before_update、_after_update、_after_select......
しかしマニュアルには載っておらず、ソースコードでしか見えません.テストクラスを新規作成します.class.php
class ArticleModel extends Model {

    protected $article = '';

    public function _initialize(){
        $this->article = M('Article');
    }

    public function updateArt($id = 0, $data = array()){
         $this->article->where('id = ' . $id)->save($data);
    }

    protected function _before_update(&$data,$options) {
        $data['contents'] = 'ppppppp';
    }

    protected function _after_update($data,$options) {
        $this->article->add($data);
    }
}
コントローラで呼び出す
public function update() {
        $id = 1;
        $data['title'] = 'ttt';
        D('Article')->updateArt($id,$data);
    }
の結果、_before_updateと_after_updateはトリガーされていませんが、システムのThinkModelクラスでトリガーされます.マニュアルではMメソッドとDメソッドについて、この文を発見しました.
Mメソッドをインスタンス化する場合、デフォルトではシステムを直接インスタンス化するThinkModelクラスです.私はいつもカスタムモデル層を書くとき、モデル層の中でまずMを自分で見て、問題を見つけて、カスタムモデル層を修正することに慣れています.
class ArticleModel extends Model {

    public function updateArt($id = 0, $data = array()){
         $this->where('id = ' . $id)->save($data);
    }

    protected function _before_update(&$data,$options) {
        $data['contents'] = 'ppppppp';
    }

    protected function _after_update($data,$options) {
        $this->add($data);
    }
}

TPマニュアルのMメソッドとDメソッドについての紹介を引用し、以下をまとめます.
Dメソッドは、モデルクラスを自動的に検出し、カスタムモデルクラスが存在する場合はカスタムモデルクラスをインスタンス化し、存在しない場合はシステムのThinkModelベースクラスをインスタンス化し、インスタンス化されたモデルについてはインスタンス化を繰り返すことはありません.Dメソッドでモデルクラスをインスタンス化する場合は、通常、特定のモデルクラスをインスタンス化します.データテーブルに対して基本的なCURD操作を行うだけであれば、
Mメソッドをインスタンス化すると、特定のモデルクラスをロードする必要がないため、パフォーマンスが向上します.
Mメソッドをインスタンス化する場合、デフォルトではシステムを直接インスタンス化するThinkModelクラスです.