【发布时间】:2016-01-12 16:02:30
【问题描述】:
如何在一个视图中合并两个控制器。
我有两个控制器:
1.后控制器
2. 评论控制器
帖子控制器将显示数据库中的所有帖子,并且帖子可以有 cmets。对于 cmets,我使用另一个控制器 CommentController 来避免 DRY。在循环的 html 帖子列表中,如果所有基于其 ID 的帖子都存在,则尝试附加 cmets。
在我的PostController > indexAction() 获取所有帖子
// controllers/PostController.php
/**
* List all posts
*
*/
public function index()
{
$data = array(
'posts' => $this->post->findAll(),
);
$this->load->view('post/index', $data);
}
这是来自 comment controller 的方法,用于列出分配 post_id 的 cmets:
// controllers/CommentController.php
/**
* List all comments assigning post id
*
* @param int $post_id
*/
public function index($post_id)
{
$data = array(
'comments' => $this->comment->findAllByPostId($post_id), // <-- SELECT * FROM comments WHERE post_id = {post_id}
);
$this->load->view('comment/index', $data);
}
所以现在在post/index 获取所有帖子:
<?php if($posts): ?>
<?php foreach ($posts as $post): ?>
<h1> <?= $post->title; ?> </h1>
<div> <?= $post->text; ?> </div>
<div class="comment-list">
<!-- How to call here comment controller and index($post->post_id) -->
<!-- i can use load->view('comment/index') but with this i do nothin i need to assigning post id
<!-- Need somthing $commentObject->index($post->post_id) but this in MVC is not good idea -->
</div>
<?php endforeach() ;?>
<?php endif; ?>
还有其他解决方案吗?
我解决这个问题的解决方案是将所有功能放在一个控制器 Post 中。但我认为这是不好的做法,因为我稍后会干。我需要其他 ex 的评论控制器(PictureController 也可以有我不想要 DRY 的 cmets)
也许我的流程或组织不好?
ps。我搜索这个,但结果对我没有帮助
【问题讨论】:
-
或者只创建一个辅助函数来获取它?
-
您是否尝试过从您的帖子控制器中获取您的 cmets,而不是在您的视图中?因此,在您的帖子控制器中,抓取返回数组的帖子,然后抓取您的 cmets,调用您的 cmets_model 并将它们添加到数组中。此时,您可以将循环保持在视图中,并遍历已被抓取的子 cmets。
-
问题是如何获取
post_id并将其分配给索引 -
在 codeigniter 中,您无法将控制器加载到视图中。你需要使用类似 HMVC bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc
标签: php codeigniter model-view-controller