cakephpモデルフックメソッド一覧

2015年1月10日更新 view: 1772 view

cakephp2.4以降は注意

http://blog.xao.jp/blog/cakephp/upgrading-to-2-4-1/
にあるとおり、渡すパラメーターが変わっている。

photoBy: http://www.hayashi-and.co.jp/com-se/rigging/r-img/4d/d-top.gif

フックメソッドまとめ

よく忘れるのでメモ。
behavior から使う場合は &$Model が必要になる。

コード

//validate前に呼び//find実行前に呼び出し
//@return $q array クエリの配列を返す
beforeFind($q);

//find実行後に呼び出し
//primary は true にしておく
//@return $results array 加工後の $results を返す
afterFind($results,$primary);

//validate前に呼び出し
//@options save等で指定されたオプション値がそのまま引き次がれる
//@return 成功 true , 失敗 false
beforeValidate();

//save前
//@return 成功 true 失敗 false
beforeSave();

//save後
//@return レコードがすでにある場合は true 新規 false
afterSave($created);

//delete前
//@cascade アソシエーションも削除する場合は true
beforeDelete($cascade = true);

//delete後
//戻り値、返り値ともに無し
afterDelete();

//error発生時
//戻り値、返り値ともに無し
onError($error); 出し

beforeSave

保存前に値を + 100 して保存

$this->data で値を取得できる

function beforeSave()
{
    $this->data['Model']['data'] = $this->data['Model']['data']+100;
    return true;
}
スポンサードリンク

上書きかどうかをチェック

function beforeSave()
{            
    if(!empty($this->data[$this->name][$this->primaryKey])){
        //上書き
    } else {
        //新規保存
    }
    return true;
}

beforeFind

検索前に条件を追加

function beforeFind($q)
{
    $q['conditions']['Article.id !='] = '1';
    return $q;
}

afterFind

データを見つけた直後に加工

$data に 検索された結果の配列が入る。

function afterFind($data)
{
    if(isset($_SERVER['REQUEST_URI'])){
        //指定URLならデータを処理
        if(preg_match('/\/articles\/add\//',$_SERVER['REQUEST_URI'])){
        }
    }
    return $data;
}

beforeDelete , afterDeleteは deleteAll時は動作しない

afterDelete

データ削除後に処理

$this->id で最後に削除された id を取得できる。

function afterDelete()
{
    //古い記事へのリンクも削除
    if(isset($this->id)){
        $this->Articlelink = Classregistry::init('Articlelink');
        $this->Articlelink->deleteAll(array('article_id' => $article_id));
    }
    
    return true;
}

全てのメソッドにおいて、
決められた 配列及び true,false を返す必要がある。

スポンサードリンク

関連記事

関連カテゴリ

コロ助

web関連の記事や制作系の記事をどんどんまとめていきます。 宜しくお願いします!

ピックアップ

パソコン・ソフトウェア ランキング

1月15日 ( 月 ) にアクセスが多かった記事はこちら!