CakePHP3でログイン時間を残す
の編集
https://yassu.jp/pukiwiki/index.php?CakePHP3%A4%C7%A5%ED%A5%B0%A5%A4%A5%F3%BB%FE%B4%D6%A4%F2%BB%C4%A4%B9
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
[[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またはパスワードが間違っています')); } }
タイムスタンプを変更しない
[[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またはパスワードが間違っています')); } }
テキスト整形のルールを表示する