私は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. PHPUnit:リクエストごとに404コード
- 3. CakePHPはシェルとそのタスク間でコードを共有します
- 4. ASIHTTPRequest:リクエストごとに送信するヘッダを追加する
- 5. 共通コードとPreferenceActivity
- 6. WP7の全ページに共通のボタンを追加するには?
- 7. コードごとに添付プロパティのデータバインドを追加する
- 8. デスクトップアプリケーションとWebの共通コード
- 9. PyQtは、クリックごとに追加ダイアログを作成します。
- 10. woocommerceの通貨コードを追加する
- 11. MF8のすべてのアダプタの共通フォルダに共通ファイルを追加するには
- 12. 抽象クラスと共通コード
- 13. カスタムモジュールを使用してアカウント共通レポートにボタンを追加 - Odoo
- 14. パンダは共通変数で2つのデータフレームを追加します
- 15. クエリのN文字ごとに\ nを追加しますか?
- 16. 特定のチームメンバーごとにホバーオーバーレイテキストを追加します
- 17. CakePHP(3.0)で通貨記号の後にスペースを追加するには?
- 18. cakephp <a>タグをコードなしで追加する
- 19. Magento - 商品説明に共通のサプライヤー情報を追加します(スタティックブロック?)
- 20. 共通関数クラスに配列を追加する際のリンクエラー
- 21. 共通コントロールの問題にカスタムプロパティを追加する
- 22. 実行ごとにレコードを追加します。
- 23. 各リンクをクラスごとに1回だけ追加します
- 24. CakePHP 3.xは、フロントエンドコントローラに異なるバリデーションルールを追加します
- 25. 共通のコードは、私がトップにbuild.gradle(モジュール)から共通のコードを抽出したいトップレベルのbuild.gradle(プロジェクト)
- 26. Typeahead in rails app:プリフェッチを介してすべてのリクエストにJSONリクエストを追加するのではなく、特定のリクエストにJSONリクエストを追加します。
- 27. Angular JSは、リクエストごとにApp IDとKeyを渡します。
- 28. js-modeに共通フックを追加する
- 29. WebリクエストごとのEF DbContext +カスタムRoleProvider = WebリクエストまたはシングルトンごとのRoleProvider?
- 30. D3は異なる要素を追加し、共通のインデックスを保持する
プロジェクトのニーズに応じて、それは良い解決策ですが、私が間違っていない限り、OPのような「すべて」のアクションとは対照的に、「許可」されていないアクションに対してのみトリガーされます。人々が心に留めておくだけのもの。しかし、私はこの質問を続ける答えとしてこれが好きです。確かに将来の開発者を助けることができ、私は確かに何人かの人々が使いたいと思うものです。 – Dave
ええ、ありがとう。 – Aamir