我在CakePHP开始了一个项目。我没有它的经验,我的大多数经验都是用Symfony2。
现在,我已经构建了一个视图文件,一个控制器和一个模型,用于该项目及其数据库。在一个控制器中,我想将一条记录从数据库传递到视图,以便在主页上使用。但是,当我收到此错误时,我无法传递记录:
注意(8):未定义的变量:content [APP \ View \ Contents \ home.ctp, 第42行
这是我的控制器代码:
function home() {
$content = $this->Content->query("SELECT title, content FROM content WHERE id = 1;");
$this->set('pagecontent',$content);
}
以下是我用于在视图文件中显示数据的代码:
<?php $content['content']; ?>
我错过了什么?
修改
我已将<?php $content['content']; ?>
更改为<?php echo $pagecontent['Content']['content']; ?>
内联,并附有Ross答案中列出的更改。但是,现在出现了这个错误:
注意(8):未定义的索引:内容[APP \ View \ Contents \ home.ctp,line 43]
我使用了<?php echo debug($this->viewVars); ?>
,这是该输出:
app\View\Contents\home.ctp (line 42) Array (
[pagecontent] => Array
(
[0] => Array
(
[content] => Array
(
[title] => <h1>This is a title</h1>
[content] => <p>this is some test text</p>
)
)
)
)
答案 0 :(得分:1)
$this->set('pagecontent',$content);
- 这是您设置视图变量的位置。
您正在尝试访问名为$content
的变量,而实际上它存储为$pagecontent
。
同样基于Cake约定,键content
实际上应该是Content
,因此您的输出应该是:
<h1><?php echo $pagecontent['Content']['title']; ?></h1>
<div class="page-content">
<?php echo $pagecontent['Content']['content']; ?>
</div>
您始终可以debug($this->viewVars);
查看您有权访问的内容。
看到输出有帮助;错误是由于蛋糕如何返回数据。
这可能是由于您使用query()
而不是find()
或read()
。 (还解释了为什么您的content
键是小写的 - query()
uses the table name,而不是型号名称。
尝试:
$content = $this->Content->find('first',
array('fields' => array('title', 'content'),
'conditions' => array('Content.id' => 1)
)
);
$this->set('pagecontent', $content);
// view
echo $pagecontent['Content']['title'];
echo $pagecontent['Content']['content'];
现在应该有效。
另一种方法是只通过数组索引访问数据:
echo $pagecontent[0]['content']['title']
不像“蛋糕”那样。
展开= query()
会返回与使用find
或read
不同的结构中的数据。还有其他方法可以做到这一点。
$this->Content->id = 1;
$this->set('pagecontent', $this->Content->read(array('title', 'content')));
也应该有效。