前提条件
- ログインしていないユーザーがユーザ新規登録できる
- ログイン認証にAuthComponentを使用
- 登録時、ログインユーザのidを各テーブルのcreated_id, modified_idにセットしている
実装
ログインしていない状態でユーザを新規登録した場合、created_id,modified_idにはidがセットされません。
なので、afterSaveメソッドにIDをセットする処理を追加しました。
ログイン時はログインIDが、未ログインは新規登録した際発行されたIDがセットされます。
function afterSave($created)
{
if ($created) {
App::uses('AuthComponent', 'Controller/Component');
$user = AuthComponent::user();
if(empty($user)){
$id = $this->data[$this->alias]["id"];
}else{
$id = $user['id'];
}
$data[$this->alias]["id"] = $id;
$data[$this->alias]["created_id"] = $id;
$data[$this->alias]["modified_id"] = $id;
$this->save($data, array('callbacks' => false));
}
}
ポイントは、callbacs => false です。
これがないとbeforeSave(), afterSave()が動いてしまい、余計な処理が走ってしまいます。