ビヘイビアを使用†ビヘイビアを使用するとスマートに実装できそうです。 adminsテーブルにlastloginフィールドをdatetime型で用意しておきます。 ビヘイビアにイベントを定義†AdminsTable.php public function initialize(array $config)
{
$this->addBehavior('Timestamp', [
'events' => [
'Admins.login' => [
'lastlogin' => 'always'
]
]
]);
}
コントローラーからイベントを呼び出し†AdminController.php public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
// 最終ログイン日時を保存
$this->loadModel('Admins');
$entity = $this->Admins->get($user['id']);
$entity->setDirty('modified', true);
$this->Admins->touch($entity, 'Admins.login');
$this->Admins->save($entity);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('ログインIDまたはパスワードが間違っています'));
}
}
ビヘイビアを使用しない†上記のやり方だとUPDATE処理でmodifiedフィールドが更新されなくなってしまいました。 なので、コントローラーのみで処理します。 AdminController.php use Cake\I18n\Time;
public function login()
{
if ($this->request->is('post')) {
$user = $this->Auth->identify();
if ($user) {
$this->Auth->setUser($user);
// 最終ログイン日時を保存
$this->loadModel('Admins');
$entity = $this->Admins->get($user['id']);
$entity = $this->Admins->patchEntity($entity, ['lastlogin' => Time::now()]);
$entity->setDirty('modified', true);
$this->Admins->save($entity);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('ログインIDまたはパスワードが間違っています'));
}
}
|