繁体   English   中英

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

[英]Using model in views / controller in codeigniter

我使用codeigniter进行Web开发。 随着学习的深入,我发现了一些其他问题,而这些问题我无法得到适当的逻辑实现。

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

可以说我还有一个名为images表,其中包含本文中使用的所有图像。 所以我可以在article.php视图上使用images_m.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不是一个好主意。 controllers使用models

因此,如何在控制器中获取特定文章的图像。

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

$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模型加载到控制器中

这样的东西(伪代码)可能起作用:

控制器:

$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的答案:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM