CakePHP:为主页设置变量

时间:2012-01-09 21:21:25

标签: cakephp controller routes cakephp-1.2

将此内容添加到display内的app/controllers/pages_controller.php函数的末尾,

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

我尝试在app/views/pages/home.ctp中访问

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

但我收到了警告

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?谢谢!

2 个答案:

答案 0 :(得分:4)

在display()方法的最后?那么这将无法工作,因为它之前和之前调用render()会在为它设置视图变量之前呈现页面。所以在render()调用之前移动你的set()调用。

还有一个提示:除了你想在每个甚至不需要显示消息的页面上引起额外的查询外,你的实现做得不是很好。

看起来你是CakePHP的初学者,所以我建议你在手册中查找requestAction()以及视图中的元素如何工作。这将允许您使用元素和请求操作(例如Messages / getListForUser)在任何视图文件中使用元素显示消息列表。

答案 1 :(得分:2)

这应该有效。确保在$this->render()调用之前设置变量。渲染调用停止执行控制器代码并将视图呈现给浏览器。所以请移动一下:

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

$this->render()电话之前,它会起作用。