我在控制器的方法中有一个对象:
$post = ORM::factory('post', array('slug' => $slug);
发送到视图:
$this->template->content = View::factory('view')->bind('post', $post);
我在帖子和评论之间创建了1-n关系。到目前为止一切都很好。
主要问题是:我应该如何将评论传递给视图?目前我在视图中得到它们($post->comments->find_all()
),但我觉得这不是最好的方法(并且我认为不符合MVC标准)。我也在考虑将它们分配给控制器中的属性($post->comments
)但是我得到一个关于未定义属性的错误(这对我来说很有意义)。
您如何建议解决该问题?
答案 0 :(得分:1)
为什么不抓取控制器中的注释并将它们传递给视图进行演示?至少我就是这样做的。
$post = ORM::factory('post', array('slug' => $slug));
$comments = $post->comments->find_all();
$this->template->content = View::factory('view')->bind('comments', $comments);
关于你的多页评论,我认为你的意思是帖子...... 这就是我通常会做的事情。
$posts = ORM::factory('post', array('slug' => $slug))->find_all();
$view = new View('view');
foreach ($posts as $post) {
$view->comments = $post->comments;
$this->template->content .= $view->render();
}
虽然这可能不是实现此目的最资源友好的方式,特别是如果您正在处理许多帖子。因此,将帖子传递给视图,然后在视图中执行foreach循环可能是更好的方法。
$posts = ORM::factory('post', array('slug' => $slug))->find_all();
$this->template->content = View::factory('view')->bind('posts', $posts);
虽然我也不一定认为从视图中运行选择查询是世界上最糟糕的事情。虽然我不是专家......;)
我刚才就CodeIgniter问过这个问题...将一个数组传递给视图并循环显示它似乎是最受欢迎的响应...
Using CodeIgniter is it bad practice to load a view in a loop