1

私のレイアウト/default.ctp ファイルから呼び出されるサイド バー ナビゲーションの要素があり、Photos コントローラーからカテゴリに関するいくつかのデータにアクセスする必要があります。どうすればこれを行うことができますか?

4

4 に答える 4

2

キャッシュを効果的に使用しない限り、requestAction には注意してください。呼び出すたびにまったく新しい要求サイクルが開始されるため、アプリケーションの速度が大幅に低下する可能性があります。

Travis Leleu の答えは、物事を行う標準的な方法です。ただし、(移植性または何らかの理由で) データを要素にインポートする必要がある場合は、requestAction は適していません。

コントローラーに必要なビジネス ロジックを実行していないため、モデル クラスをシングルトンとして要素にインポートしてインスタンス化することを強くお勧めします。ClassRegistry::init(); を使用してこれを行うことができます。

$Photo = ClassRegistry::init('Photo');
$Photo->find('all');

データの追加処理を行う必要がある場合は、モデル自体で Cakes afterFind コールバックを使用するか、Photo モデルでカスタム メソッドを作成する必要があります。

class Photo extends AppModel {

    function customFind () {
        $photos = $this->find('all');
        foreach ($photos as $photo) {
            //processing code here...
        }
    }

}

次に、要素で呼び出します。

$Photo = ClassRegistry::init('Photo');
$Photo->customFind();

基本的にここで理解しようとしているのは、requestAction が適切な唯一の状況は、リダイレクトやコンポーネントの使用などを行う必要がある場合です。

単純にデータを取得および/または操作する場合、それはモデルに属します。

于 2010-03-17T03:24:32.250 に答える
1

あなたのlayous/default.ctpを通常のテンプレートと見なして、

<?php echo $this->element('your element'); ?>

必要な場所。

ところで、使用:

$data = $this->requestAction('controller/action');

データにアクセスする

于 2010-03-16T02:37:02.080 に答える
0

要素にデータを送信できます。たとえば、default.ctp で:

<?php echo $this->element('side_nav', $your_data); ?>

side_nav.ctp でそのデータを処理できます。

于 2010-03-17T04:13:49.267 に答える
-1

これを標準の Cake の慣習にしないのはなぜですか?

コントローラーでは、

$this->set( 'categories', $this->Photos->find(...) );

于 2010-03-16T16:05:57.593 に答える