在codeigniter中的视图/控制器中使用模型

时间:2013-09-06 20:23:16

标签: php codeigniter

我使用codeigniter进行Web开发。随着我的学习更多,我发现了一些我无法正确实施的问题。

我有一个article_controller.php和一个视图article.php。我试图在页面上显示所有文章标题。 (此代码仅用于测试目的)。

假设我有另一个名为images的表,其中包含文章中使用的所有图像。我可以在images_m.php视图中使用article.php模型。

Article_Controller.php

$data['articles'] = $this->article_m->get(); //gets all of the articles 
$this->load->view('articles',$data);

Article.php

foreach($articles as $article):
    echo $article->title;
    $images = $this->images_m->get_by(array('article_id'=>$article->id)); //gets all the images for current article

    foreach(images as $image):
        echo "<img src='./uploads/".$image->filename ."'/>";
    endforeach; 

endforeach;

代码完美无缺。我在很多网站上都使用过类似的代码。 但主要问题是,我已经读过在视图中使用models不是一个好主意。请改用models中的controllers

那么如何获取控制器中特定文章的图像。

2 个答案:

答案 0 :(得分:3)

在控制器中获取图像,并将图像对象与每个文章对象合并,并将其传递给视图

$articles= $this->article_m->get(); //gets all of the articles 

foreach($articles as $article):

    $article->article_images = $this->images_m->get_by(array('article_id'=>$article->id)); //gets all the images for current article   
endforeach;

$data['articles']=$articles;
$this->load->view('articles',$data);

确定您已在控制器中加载images_m模型

答案 1 :(得分:2)

像这样的东西(伪代码)可能有效:

控制器:

$articles = $this->article_m->get();
$images = array();

foreach($articles as $article):
    $images[$article->id] = array();

    $article_images = $this->images_m->get_by(array('article_id'=>$article->id));
    foreach($article_images as $image):
        $images[$article->id][] = './uploads/'.$image->filename;
    endforeach; 
endforeach;

$data['articles'] = $articles;
$data['images'] = $images;

$this->load->view('articles',$data);

查看:

foreach($articles as $article):
    echo $article->title;

    foreach($images[$article->id] as $image):
        echo "<img src='$image'/>";
    endforeach; 

endforeach;

基本上只是在视图中执行相同的工作,而是在控制器中执行。然后将其放入$data数组并将其发送到视图。


编辑:我建议查看@ dianuj的答案:)