モデルのコールバック関数のメモ
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