2012-01-09 7 views
1

CakePHPは:

// grab all message lists 
    $this->loadModel('MessageList'); 
    $this->set('messageLists', $this->MessageList->find('all')); 

app/controllers/pages_controller.php内部の私のdisplay関数の最後にこれを追加した後、ホームページ用の変数を設定する私は

<?php 
     foreach($messageLists as $messageList) { 
      print_r($messageList); 
     } 
    ?> 

ようapp/views/pages/home.ctpでそれにアクセスしようしかし、私は警告を受けます

Notice (8): Undefined variable: messageLists [APP\views\pages\home.ctp, line 9] 

私のapp/config/routes.phpは持っている:

/** 
* Here, we are connecting '/' (base path) to controller called 'Pages', 
* its action called 'display', and we pass a param to select the view file 
* to use (in this case, /app/views/pages/home.ctp)... 
*/ 
    Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 
/** 
* ...and connect the rest of 'Pages' controller's urls. 
*/ 
    Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 

私は私のホームページに$messageListsにアクセスできるように変更するには何が必要ですか?ありがとう!

答えて

4

display()メソッドの最後に?うーん、これはうまくいきません。なぜなら、前と後のrender()の呼び出しは、ビューのvarsを設定する前にそのページをレンダリングするからです。レンダリング()コールの前にset()コールを移動してください。

さらにヒント:メッセージを表示する必要がない各ページで追加のクエリを実行する場合を除いて、実装はあまりうまくいかない。

あなたはCakePHPの初心者のようですので、マニュアルでrequestAction()を検索し、ビューの要素がどのように機能するかを調べることをお勧めします。これにより、要素と要求アクション(たとえばMessages/getListForUser)を使用して、任意のビューファイル内の要素を使用してメッセージのリストを表示できます。

+0

'<?php \t \t $ messageLists = $ this-> requestAction(array( 'controller' => 'メッセージ'リスト、 'アクション' => 'getAll'))); \t \t print_r($ messageLists); \t \t \t \t} \t?> 'それは私に無限のリダイレクトループを与えます:S – Garrett

+0

$ this-> MessageList-> find( 'all')); return;それともまだ設定していますか? – burzum

2

これは動作するはずです。 $this->render()コールの前に変数を設定していることを確認してください。コントローラーコードの実行を停止し、ビューをブラウザーにレンダリングするレンダー呼び出しです。だからこれを移動してください:

// grab all message lists 
    $this->loadModel('MessageList'); 
    $this->set('messageLists', $this->MessageList->find('all')); 

$this->render()コールの前に移動してください。