2011-10-27 5 views
2

私はデータベースクエリから作成された3つのリストを持つレイアウトを使用しています。私はこのデータをセッションに入れることを提案するので、アプリケーションはすべてのページの読み込み時にデータベースにクエリする必要はありません。CakePHP - 特定のレイアウトのロジックを置くのに最適な場所はどこですか?

アプリの管理セクションでは、別のレイアウトを使用するため、このデータは必要ありません。 cakePHPでは、このセッションデータを設定するロジックを置くのに最適な場所はどこですか?

AppControllerを拡張し、このセッションデータを設定している別のコントローラを作成するのに最適な方法はありますか?

答えて

1

これら3つのリストの要素を作成できます。これを行う最善の方法はrequestAction and elementsを使用することです。要素を使うと、出力をキャッシュすることができます。これは常に良い考えです。

+0

レイアウトに固有のデータが必要です。つまり、管理レイアウト用にこのデータが生成されないようにします。 – freshest

+0

'$ this-> element'を使い、明示的にこれらの3つの要素を使用しない限り、あなたの管理用レイアウトでは生成されません。 CakePHPの "要素"は、ルビーの "部分的な部分"に似ています。それらは再利用可能なHTMLコードであり、どこに配置してもかまいません。要求ごとにbeforeRender()には入りません。それはレイアウトによって呼び出され、レイアウトでのみ使用されます。 – gustavotkg

-1

私はまだCakePHPを新しくしているので、これはこれを実行する最良の方法ではないかもしれませんが、セッションデータがロードされてセッションからデータが読み込まれるかどうかを確認するカスタム動作またはデータベースがすでにロードされているかどうかによって異なります。だから私は、コードを動作として記述することができ、モデルは必要に応じて使用されると思います。私がここで間違っていると誰かが私を修正します。

+0

私のモデルではセッションを使用しません。データベースを照会したくない場合は、単にキャッシュを使用してください。それはそれのためです=) – gustavotkg

+0

モデルはセッションを使用すべきではありません。 – BadHorsie

1

これをAppControllerのbeforeRender()で指定します。任意のコントローラでbeforeRender()を使用している場合は、parent :: beforeRender()を呼び出すことを忘れないでください。

+0

しかし、AppControllerから継承する管理セクションにはこのデータは必要ありません。基本的に私はdefault.ctpテン​​プレートのデータだけを必要としています... – freshest

+0

この方法で現在のレイアウトをチェックし、それに応じていつでも対応することができます。 – mark