将此内容添加到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
?谢谢!
答案 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()
电话之前,它会起作用。