モデルのコールバック関数のメモ

beforeFind( mixes $queryData )
find操作の前に$queryDataを操作したり、falseを返してfindを中止させる。
未だ使ったことがない。
$queryDataにはconditions, fieldsなどが入っているらしい。
ユーザのルールに基づいてfind操作を中止する場合などで使用するらしい。
戻り値は加工後の$queryDataまたはfalse

<?php
function beforeFind( $queryData ) {

}


afterFind( array $results, bool $primary )
findで返された結果に対して処理を行う。
データベースのままだと扱いにくいデータ形式を加工したりするのに使っている
戻り値は加工後の$results

<?php
function afterFind( $results, $primary ) {
	foreach( $results as $key => $val ) {
		if (isset($val['モデル名']['フィールド名'])) {
			$results[ $key ]['モデル名']['フィールド名'] = 値;
		}
	}
	return $results;
}

$resultsにはfindによる複数の結果が入っている。
edit等で1件しか扱わない場合でも$resultsは配列になっているので
ループして処理する必要がある。(そりゃそうだ)
2番目の引数$primaryがよくわからない。
今まで単に「function afterFind( $results )」と引数を一つしか指定してなかったので、
存在すら知らなかった。何なんやろ?


beforeValidate()
validateが実行される前に呼び出される。
モデルの値を変更したり、validateの設定を変更したりする。
戻り値はtrue。

<?php
function beforeValidate()
{
	// urlが未入力(http://のまま)なら空白にする
	if( isset( $this->data['モデル名']['url'] ) && $this->data['モデル名']['url'] == "http://" )
	{
		$this->data['モデル名']['url'] = "";
	}
	return true;
}

return true;をいつも忘れる。
validateの設定を変えたことは無いが、モデルの値を変える時に使用したことあり。


beforeSave()
saveの前に呼び出される。
フォームで操作しきれない値をセットしたり、加工したりするのに使用。
割と使うかな。

<?php
function beforeSave()
{
	$this->data['モデル名']['フィールド名'] = 値;
	return true;
}

これにもreturn true;が必要。


afterSave()
saveの後に呼び出される。
idに基づいたデータを生成したり、処理したりする場合に使ったりする。
引数の$createdは新規作成時にtrueになる。更新時はfalse。

<?php
function afterSave($created)
{
	if ($created) {
		$this->saveField('login_name', $this->_createLoginName());	
		$this->saveField('login_pass', $this->_createLoginPass());	
	}
}




編集中...

beforeDelete


afterDelete


onError