私はcakephp 2.6を使用しています。現在ログインしているユーザーがウェブサイトのURLをヒットするたびに、データベーステーブルの列「last_request」を更新する必要があります。 cakePHPが新しくなったので、共通のコード(例:コンポーネントなど)を実装できる場所を教えてください。そうすれば、すべての要求を各関数またはコントローラからそのコードを特に呼び出すことなく管理できるようになります。おかげさまで CakePHPはリクエストごとに共通のコードを追加します
1
A
答えて
1
@Daveによって提案された回答は、おそらく@Ayaouが提供する最良の解決策と回答は、コードの繰り返しの可能性を除いてうまく機能します。
私が共有したいことは、Authorizationの中で AppController内で実行できることです。
public function isAuthorized($user)
{
$userTable = ClassRegistry::init('User');
$data = ['last_request' => $last_request_data];
$userTable->id = $user['id'];
$userTable->save($data);
}
afterFilterでも同じことができます。
-2
あなたは、私は、テーブル名がusers
<?php
class User extends AppModel{
public function updateLastHit($id, $value){
$lastID = $this->id;
$this->id = $id;
$result = $this->saveField('last_hit', $value);
$this->id = $lastID;
return $result;
}
}
コントローラのアクションロジックが完了したとき、あなたはafterFilter
は、この関数を呼び出していることを、ここで想定してテーブル
に関連付けられているModel
でそれを行うことができます適切な使用方法
AppController
から
public function afterFilter(){ // afterRender
//Set the variable $value
$userModel = ClassRegistry::init('User');
$userModel->updateLastHit($this->Auth->user('id'), $value);
}
2
あなたのAppControllerにafterFilter()
メソッドを追加したいと思うでしょう。 (details here)
afterFilter:すべてのコントローラのアクション後に呼び出さ、レンダリング後には完了です。これは最後に実行するコントローラーメソッドです。
より前にコードを更新したい場合は、beforeFilter()を使用することもできます。Request-Lifcycle callbacksのいずれかを使用できます。
次に、ユーザーモデルに、希望する操作を行うメソッドを追加できます(ユーザーの行をlast_request
フィールドで更新)。
afterFilter()メソッドで、Userモデルがロードされていることを確認してから、そのメソッドを呼び出します。リクエストごとにafterFilterがトリガーされ、モデルのコードが実行されます。
関連する問題
- 1. Visual Studioコードで共通言語スニペットを追加するには?
- 2. 共有コードへの共有と追加
- 3. CakePHPはシェルとそのタスク間でコードを共有します
- 4. PHPUnit:リクエストごとに404コード
- 5. リクエストごとに生のヘッダー値をファイルに追加しますか?
- 6. ASIHTTPRequest:リクエストごとに送信するヘッダを追加する
- 7. 共通コードとPreferenceActivity
- 8. Jquery ajaxリクエストは、リクエストごとに指数関数的に増加します。
- 9. WP7の全ページに共通のボタンを追加するには?
- 10. コードごとに添付プロパティのデータバインドを追加する
- 11. Androidエンドポイントで共通の設定値を追加しました
- 12. デスクトップアプリケーションとWebの共通コード
- 13. スパークストリーミングで分ごとにリクエストを追跡
- 14. 各URLにchrome jsessionidが追加され、リクエストごとに変更されます
- 15. Mysqlは列ごとにグループを追加します
- 16. PyQtは、クリックごとに追加ダイアログを作成します。
- 17. DockerはネットワークごとにローカルIPアドレスを追加します
- 18. woocommerceの通貨コードを追加する
- 19. MF8のすべてのアダプタの共通フォルダに共通ファイルを追加するには
- 20. 抽象クラスと共通コード
- 21. CakePHP(3.0)で通貨記号の後にスペースを追加するには?
- 22. パンダは共通変数で2つのデータフレームを追加します
- 23. カスタムモジュールを使用してアカウント共通レポートにボタンを追加 - Odoo
- 24. cakephp <a>タグをコードなしで追加する
- 25. 特定のチームメンバーごとにホバーオーバーレイテキストを追加します
- 26. クエリのN文字ごとに\ nを追加しますか?
- 27. ループ内のデータフレーム行ごとに値を追加します
- 28. Magento - 商品説明に共通のサプライヤー情報を追加します(スタティックブロック?)
- 29. 共通関数クラスに配列を追加する際のリンクエラー
- 30. 共通コントロールの問題にカスタムプロパティを追加する
プロジェクトのニーズに応じて、それは良い解決策ですが、私が間違っていない限り、OPのような「すべて」のアクションとは対照的に、「許可」されていないアクションに対してのみトリガーされます。人々が心に留めておくだけのもの。しかし、私はこの質問を続ける答えとしてこれが好きです。確かに将来の開発者を助けることができ、私は確かに何人かの人々が使いたいと思うものです。 – Dave
ええ、ありがとう。 – Aamir