我用cakephp创建了一个简单的博客,其中有一些帖子和一些评论。
烘焙应用程序后,它会创建一个comments
文件夹,其中包含index.ctp
和posts
文件夹the index.ctp
我想做的是将它们显示为休闲:
Post1
comment1
comment2
Post2
comment1
comment2
如果我将评论放在posts / index.ctp中,我会收到一条错误,告诉我$comments
未定义。
我该怎么做? 感谢
编辑:
好吧,我很抱歉卷土重来,但它仍然有点不清楚。我确实有$hasMany
关系设置,实际上在显示帖子的页面上我有一个指向评论的链接。我希望他们唯一能够在与帖子相同的页面中显示。
我应该可以说<?php echo $comment['Comment']['content']; ?>
答案 0 :(得分:4)
检查您的控制器。
如果要在帖子视图中显示评论信息,您需要确保帖子控制器可以加载数据。
“CakePHP”方式是定义模型之间的关系。检查您的烘焙模型,看看是否有这样的东西:
class Post extends AppModel{
var $hasMany = array( 'Comment' );
}
当模型相互关联时,Posts控制器将自动查找Post对象及其关联的Comment对象。
例如,这一行:
$this->Post->findById( $id );
会产生这样的东西:
Array
(
[Post] => Array
(
[id] => 42
[text] => Post1
)
[Comment] => Array
(
[0] => Array
(
[id] => 1
[post_id] => 42
[text] => Comment1
)
[1] => Array
(
[id] => 2
[post_id] => 42
[text] => Comment2
)
)
)
的良好文档
编辑:在评论后添加更多信息
只要模型具有关联,CakePHP就会适当地提取数据(除非你设置Recursive => false
或使用Containable
,我认为你不是)。
检查你的PostsController控制器,看看它是如何加载数据的。我猜它正在做类似以下的事情:
$post = $this->Post->findById( $id );
$this->set( compact( 'post' ) );
或
$this->data = $this->Post->findById( $id );
检查存储检索数据的方式,然后从视图中访问该变量。
例如,如果它将数据存储在名为“$ post”的变量中,您可以在视图中输入类似的内容:
// output the 'text' field of the 'post' object
echo $post[ 'post' ][ 'text' ];
// loop through associated comments
foreach ( $post[ 'comment' ] as $comment ){
//output the 'text' field of a 'comment' object
echo $comment[ 'text' ];
}
默认情况下,CakePHP在检索数据后会在数组中隐藏大量细节。诀窍是知道数据的层次结构并相应地从数组中获取数据。