如何在 CakePHP 中将数据库记录从控制器传递到视图
我已经在 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']; ?>
我错过了什么?
编辑: 我已经更改了 到
与罗斯的答案中概述的更改一致。然而,现在出现了这个错误:
通知(8):未定义索引:内容[APP\View\Contents\home.ctp,行 43]
我使用了 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>
)
)
)
)
I've started a project in CakePHP. I have no experience of it, most of my experience is with Symfony2.
Right now, I have built a view file, a controller, and a model for use with this project and it's database. In one controller I want to pass one record from the database to the view for use on the homepage. However, I'm unable to pass the record as I get this error:
Notice (8): Undefined variable: content [APP\View\Contents\home.ctp,
line 42]
Here is my controller code:
function home() {
$content = $this->Content->query("SELECT title, content FROM content WHERE id = 1;");
$this->set('pagecontent',$content);
}
And here is the code I'm using to display the data in the view file:
<?php $content['content']; ?>
What have I missed?
EDIT:
I have changed the <?php $content['content']; ?>
to <?php echo $pagecontent['Content']['content']; ?>
inline with the changes outlined in the answer from Ross. However, there is now this error:
Notice (8): Undefined index: Content [APP\View\Contents\home.ctp, line
43]
I have used the <?php echo debug($this->viewVars); ?>
and this is the output from that:
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>
)
)
)
)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
$this->set('pagecontent',$content);
- 这是您设置视图变量的位置。您正在尝试访问名为
$content
的变量,而实际上它存储为$pagecontent
。同样基于 Cake 约定,关键
content
实际上应该是Content
,因此您的输出可能应该是:You can always do
debug($this->viewVars );
以准确查看您有权访问的内容。查看输出会有所帮助;该错误是由于 cake 返回数据的方式造成的。
这可能是由于您使用了
query()
而不是find()
或read()
。 (还解释了为什么您的content
键是小写的 -query()
使用表名称,而不是模型名称。尝试:
现在应该可以工作。
另一种方法是仅通过数组索引访问数据:
echo $pagecontent[0]['content']['title']
不像“蛋糕”那样
Expand =
query()
返回的数据结构与使用不同 可以使用其他方法。。
find
或read
也$this->set('pagecontent',$content);
- this is where you are setting view variables.You are trying to access a variable called
$content
, when in fact it is stored as$pagecontent
.Also based on Cake conventions, the key
content
should actually beContent
, so your output should probably be:You can always do
debug($this->viewVars);
to see exactly what you have access to.Seeing the output helps; the error is due to how cake is returning the data.
This is likely due to you using
query()
rather thanfind()
orread()
. (also explains why yourcontent
key is lowercase -query()
uses the table name, rather than the model name.Try:
should now work.
The alternative is to just access the data through the array index:
echo $pagecontent[0]['content']['title']
which isn't as "cake" like.
to expand =
query()
returns data in a different structure than usingfind
orread
. There's other ways you can do this too.should also be valid.