- 追加された行はこの色です。
- 削除された行はこの色です。
[[CakePHP3めも]]
*ビヘイビアを使用 [#hbb4e669]
ビヘイビアを使用するとスマートに実装できそうです。
adminsテーブルにlastloginフィールドをdatetime型で用意しておきます。
**ビヘイビアにイベントを定義 [#n90fa244]
AdminsTable.php
public function initialize(array $config)
{
$this->addBehavior('Timestamp', [
'events' => [
'Admins.login' => [
'lastlogin' => 'always'
]
]
]);
}
**コントローラーからイベントを呼び出し [#wf14c6cf]
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またはパスワードが間違っています'));
}
}
*ビヘイビアを使用しない [#p092ab81]
上記のやり方だと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またはパスワードが間違っています'));
}
}