在CodeIgniter中没有一些字母的情况下从foreach和路由获取ID

时间:2012-03-08 15:02:00

标签: php codeigniter

我正在使用CodeIgniter开发一个新的php项目,我对此几乎没有任何疑问。

1 - 我创建了新闻脚本,现在我做了后端,我正在开发前端。在前端,我已经设置了最新消息,但我想在一条新闻中显示有多少评论。我使用foreach,但我不知道在MVC框架中接下来要做的最好的方法是什么。

<?php
foreach ($query as $news)
{
    echo $news->title . "<br>" . $news->content . "<br>";
    $commentnum = $this->db->select('id_comment, id_news')->where('id_news', $news->id)->get('comments');
    echo $commentnum->num_rows();
}
?>

好的..这是我在其他项目中使用的一些代码。在MVC模式中使用该代码的最佳方法是什么?

2 - 在这个新闻剧本中,我有一些名为News的控制器,其中包括函数post,cats和tags。我正在使用的代码,但不能像我想的那样工作:

$route['news/(:any)'] = "news/post/$1";

那么如何从路线中排除邮政,猫和标签 - &gt;如果我键入news/tags/first,要先获取标记而不是错误,则该帖子不存在。怎么做?

1 个答案:

答案 0 :(得分:0)

如果您想坚持使用MVC模式(我建议您这样做,因为从长远来看管理您的应用程序或更新其外观会使事情变得更容易),请执行以下操作:

而不是echo输出所有“新闻”信息,将其存储到数组中,然后将该数组传递给VIEW。然后让VIEW通过该数组(新闻和相关评论)并输出它。

这样,组合这个新闻/评论结构的逻辑仍然存在于控制器中,视图只是吐出数据,而不是通过$query对象进行迭代。

这样可以实现控制器,模型和控制器的清晰分离。图。

示例:

foreach ($query as $news)
{
    $comments = $this->db->select('id_comment, id_news')->where('id_news', $news->id)->get('comments');        
    $data['news'][$news->id]['title'] = $news->title;
    $data['news'][$news->id]['content'] = $news->content;
    $data['news'][$news->id]['num_comments'] = $comments->num_rows();

    if($data['news'][$news->id]['num_comments'] > 0){
        foreach ($comments as $entry){
              $data['news'][$news->id][$entry->id]['comment'] = $entry->content;  
        }
    }
}

就您的路由问题而言,您需要将URI正确路由到控制器中的METHOD:

$route['tags/(:any)'] = "news/tags/$1";
$route['(:any)'] = "news/posts/$1";

$route['(:any)']我没有亲自尝试过,但是我建议您将URI格式化为http://domain.com/post/name-of-post而不是http://domain.com/name-of-post,它因为上面的路由$route['(:any)']迫使你为标签/链接/用户等等所有其他东西创建CUSTOM路由(白名单),所以它会更加清晰,因为路由保持独立;